3

我想使用 DLLImport 在我的 C# 应用程序中使用 C++ DLL 中的函数:

BOOL IsEmpty( DWORD KeyID, BOOL *pFlag )

我尝试了许多组合但徒劳无功,例如:

public extern static bool IsEmpty(int KeyID, ref bool pFlag);

该方法返回 false(这意味着错误)。

知道怎么做吗?

4

4 回答 4

4

引用“威利”(有修正):

当心布尔值!

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 位约定。)

于 2012-10-03T15:12:20.940 回答
1

BOOL在 Win32 中是 int 的 typedef,所以你应该改成boolInt32所以定义是int IsEmpty(uint KeyID, ref int pFlag)

于 2012-10-03T15:12:13.310 回答
1

因为在 c++ 中,BOOL 被定义为 int。你应该使用

    [return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
    public static extern  bool IsEmpty(uint KeyID, ref int pFlag) ;
于 2012-10-03T15:18:32.400 回答
0

感谢您的帮助!

最后这对我有用

公共外部静态 int IsEmpty(int KeyID, int[] pFlag)

于 2012-10-04T07:58:23.767 回答