簡體   English   中英

從 C++ 到 C# 的 bool 指針

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM