我正在使用带有以下不透明句柄的第三方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()方法,所以它必须是别的我做错了。
答案 0 :(得分:7)
该函数将指针带到一个不透明的句柄,以便它可以将句柄写入指针所指向的内存中。
在C#术语中,这是out IntPtr
:
[DllImport("VendorLib.dll")]
static extern int vendorLoadFile(out IntPtr handle, string path);
IntPtr handle;
int code = vendorLoadFile(out handle, path);