[英]bool pointer from C++ to C#
我想在使用 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++ 有它的內置“bool”,它是一個單字節
...並補充@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 位約定。)
Win32 中的BOOL
是 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) ;
謝謝您的幫助!
終於這對我有用
public extern static int IsEmpty( int KeyID, int[] pFlag)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.