簡體   English   中英

在C#中使用PInvoke的不透明指針

[英]Opaque pointers with PInvoke in C#

我正在使用具有以下不透明句柄的第三方C庫:

typedef struct _VendorHandle *VendorHandle;

以下是供應商的C示例,說明如何加載句柄:

VendorHandle handle;
int err;
err = vendorLoadFile(&handle, "something.bin");

我試圖使用以下聲明在C#中使用PInvoke調用此方法:

[DllImport("VendorLib.dll")]
static extern int vendorLoadFile(IntPtr handle, string path);

然后我添加了以下代碼來使用聲明:

IntPtr handle = new IntPtr();
int code = vendorLoadFile(handle, path);

當我運行它時,我收到以下錯誤:

嘗試讀取或寫入受保護的內存。 這通常表明其他內存已損壞。

我知道DLL很好,PInvoke正在工作,因為我正在執行他們的vendorVersion()方法所以它必須是別的我做錯了。

該函數接受一個指向不透明句柄的指針 ,以便它可以將句柄寫入指針指向的內存中。
在C#術語中,這是一個out IntPtr

[DllImport("VendorLib.dll")]
static extern int vendorLoadFile(out IntPtr handle, string path);

IntPtr handle;
int code = vendorLoadFile(out handle, path);

暫無
暫無

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

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