gpt4 book ai didi

c# - 在 C# 中使用 PInvoke 的不透明指针

转载 作者:行者123 更新时间:2023-11-30 13:57:38 25 4
gpt4 key购买 nike

我正在使用具有以下不透明句柄的第三方 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);

当我运行它时,出现以下错误:

Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

我知道 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);

关于c# - 在 C# 中使用 PInvoke 的不透明指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20252859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com