[英]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);
有人可以幫我嗎?
IntPtr
是void*
的正確類型映射。 原始類型void*
通常用於不透明指針,並且在C#中映射為IntPtr
。
我們可以驗證的p / invoke聲明的那些部分是正確的。 無法驗證的部分是:
cdecl
,但我們無法檢查。 int
或uint
。 這將在64位進程中有所作為。 因為只顯示了部分代碼和詳細信息,所以很難多說了。 您將必須驗證程序中所有我們不能執行的部分。
我建議您從使用C或C ++代碼開始並進行翻譯,以查找該代碼與C#轉換之間行為的第一點偏差。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.