Skip to main content

Stupid BOOL return value between Win 32 (unmanaged) DLL and .NET managed application


If you are developing a C# application and you have to call a function inside a Win 32 DLL which returns a BOOL value. You will encounter an unusual problem. Like when your application works in Debug mode but dies hard in Release mode.

For example you have something like this in C++ (the unmanaged DLL)

extern "C" __cdecl bool DoWork();

Very normal stuff, eh? And you think you can do this in C#

        [DllImport(
            DllConstants.DLL_FILE_NAME,
            EntryPoint = DllConstants.ENTRY_POINT_DO_WORK,
            CallingConvention = CallingConvention.Cdecl
        )]
        private static extern bool DoWorkCpp();

Noooo, DO NOT DO IT! You know why? Because in C++, bool value is stored in 1 byte but in C# (and in ANSI C), bool is 4 bytes. You have to marshal manually using [returnMarshalAs(UnmanagedType.I1)], and it will work. Hope this helps many out there. Peace out!

Comments

Post a Comment

Popular posts from this blog

Replacing GCP with Railway for faster cold start

TL;DR I switched a Dart API from Cloud Run to Railway for a 300% faster cold start, simplified DevOps, and a straightforward fee structure. Problem I'm working on this project github.com/daohoangson/flutter_widget_from_html . It is a pub.dev package that's super handy for Flutter developers who want to seamlessly render HTML in their apps. Now, when it comes to HTML, it can get pretty dynamic, right? That's why having a playground to showcase features, troubleshoot issues, and tackle bugs is crucial. The Google team has this fantastic tool called dartpad.dev , which is just perfect for this kind of thing. However, there's a little catch - third-party packages like mine usually can't be used there (unless you have thousands of likes, as explained on  Medium ). So I decided to take matters into my own hands, forked it, then deployed try.fwfh.dev with additional package support. Initial idea since 2019 First deployment  in 2021 Cl...

IMAP module for PHP in Mac OS X Mountain Lion

So here it comes again. I have recently upgraded to Mountain Lion and for whatever reason, Apple decided to nuked all my previous PHP (among other things) configurations so I have to setup IMAP in PHP again. A simple Google search may point you to this post with detailed instruction for Lion however, some steps have been changed a bit... Step 1: Install prerequisites You may choose to download Xcode ( FREE ) from the App Store then go to menu Xcode > menu item Preferences > tab Downloads, select to install Command Line Tools OR you can go to Apple Developer  to get it, you may need to login. Step 2: Compile IMAP Get the IMAP source code from University of Washington website . Please do me a favor and check that website for the latest version, it's good practice. If you that laz y , try to click the "y" to get direct link to 2007f version. Extract the package and open the Terminal to the new directory before executing these command: make osx EXTRACFLAG...

Announcing Vietnames Input Method for XenForo

(tiếng Việt ở dưới) Today I'm announcing the release of Vietnamese Input Method for XenForo as an extremely easy to use add-on. The add-on package can be downloaded here:  xfrocks.com The source is available also on github. The source tree is merged from the  mudim Google Code tree This add-on does not just insert a simple <script /> tag into every page of your site. It went far than that and create a few additional option in account/preferences page so logged in users will be able to configure their typing preferences once and for all (so if a user uses multiple machine, it still works as expected). **** Add-on này tích hợp bộ gõ mudim cho XenForo. Hỗ trợ trình soạn thảo WYSIWYG trên máy tính để bàn cũng như trình soạn thảo chuẩn cho các thiết bị di động (Android, iOS,...). Sau khi cài đặt thành viên có thể vào trang account/preferences để cấu hình bộ gõ theo mong muốn, các lần đăng nhập sau hệ thống sẽ tự động cấu hình bộ gõ (như vậy nếu có ai sử dụng nhi...