簡體   English   中英

C#中的typedef void *替代

[英]typedef void* alternative in c#

我正在使用將C語言制作成C#的DLL運行時。 我遇到以下聲明。

 typedef void *JCCP_PROPERTY_HANDLE;

在功能上它被用作:

JCCP_RESULT  __JCCP_FUNCTION__ jccpGetProperty(
    JCCP_HANDLE hjccp,
    const char *name,
    JCCP_PROPERTY_HANDLE *phproperty);

現在,我想在我的C#代碼中調用jccpGetProperty()方法。 誰能告訴我如何從C#中傳遞第三個參數(JCCP_PROPERTY_HANDLE * phproperty)以起作用。

我嘗試使用下面的代碼,但無法正常工作。

外部方法:

 [DllImport(DLL_NAME, EntryPoint = "_jccpGetProperty", CallingConvention = CallingConvention.Cdecl)]
 public static extern IntPtr jccpGetProperty(IntPtr hjccp, string name, ref IntPtr JCCP_PROPERTY_HANDLE);

用法

IntPtr handle = IntPtr.Zero;
string tag = "server.version";
var result = jccpGetProperty(hjccp, tag, ref handle);

有人可以幫我嗎?

IntPtrvoid*的正確類型映射。 原始類型void*通常用於不透明指針,並且在C#中映射為IntPtr

我們可以驗證的p / invoke聲明的那些部分是正確的。 無法驗證的部分是:

  • 調用約定。 您認為它是cdecl ,但我們無法檢查。
  • 返回類型。 您相信它是指針大小的。 同樣,我們無法檢查。 我的猜測是,更有可能使用32位整數, intuint 這將在64位進程中有所作為。
  • 傳遞給函數的值。 完全有可能正確聲明了該函數,但是您傳遞的是無效值。

因為只顯示了部分代碼和詳細信息,所以很難多說了。 您將必須驗證程序中所有我們不能執行的部分。

我建議您從使用C或C ++代碼開始並進行翻譯,以查找該代碼與C#轉換之間行為的第一點偏差。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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