我想使用 DLLImport 在我的 C# 应用程序中使用 C++ DLL 中的函数:
BOOL IsEmpty( DWORD KeyID, BOOL *pFlag )
我尝试了许多组合但徒劳无功,例如:
public extern static bool IsEmpty(int KeyID, ref bool pFlag);
该方法返回 false(这意味着错误)。
知道怎么做吗?
引用“威利”(有修正):
当心布尔值!
Win32 定义了不同版本的布尔值。
1) 大多数 Win32 API 使用的 BOOL 是
无符号整数和有符号整数(4 字节)2) BOOLEAN 是单字节,只有少数win32 API 使用!!
3) 并且 C/C++ 有它内置的“布尔”,它是一个单字节
...并添加@tenfour 指出的内容:
4) 更离奇的 VARIANT_BOOL
typedef short VARIANT_BOOL;
#define VARIANT_TRUE ((VARIANT_BOOL)-1)
#define VARIANT_FALSE ((VARIANT_BOOL)0)
有符号或无符号的性质对 BOOL 来说无关紧要,因为唯一的“假”模式是 0。所以尝试将其视为 4 字节数量......但是您与 DWORD 的接口可能是令人满意的,(我没有处理使用 Windows 64 位约定。)
BOOL
在 Win32 中是 int 的 typedef,所以你应该改成bool
,Int32
所以定义是int IsEmpty(uint KeyID, ref int pFlag)
因为在 c++ 中,BOOL 被定义为 int。你应该使用
[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
public static extern bool IsEmpty(uint KeyID, ref int pFlag) ;
感谢您的帮助!
最后这对我有用
公共外部静态 int IsEmpty(int KeyID, int[] pFlag)