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