Bre*_*lle 3 c# pinvoke pointers
我正在使用具有以下不透明句柄的第三方C库:
typedef struct _VendorHandle *VendorHandle;
Run Code Online (Sandbox Code Playgroud)
以下是供应商的C示例,说明如何加载句柄:
VendorHandle handle;
int err;
err = vendorLoadFile(&handle, "something.bin");
Run Code Online (Sandbox Code Playgroud)
我试图使用以下声明在C#中使用PInvoke调用此方法:
[DllImport("VendorLib.dll")]
static extern int vendorLoadFile(IntPtr handle, string path);
Run Code Online (Sandbox Code Playgroud)
然后我添加了以下代码来使用声明:
IntPtr handle = new IntPtr();
int code = vendorLoadFile(handle, path);
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到以下错误:
尝试读取或写入受保护的内存.这通常表明其他内存已损坏.
我知道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);
Run Code Online (Sandbox Code Playgroud)