我想从 C# 中安全的托管代码调用 C API 中的函数,该函数接收指针数组 (void**)。
我有相应的 IntPtr 对象托管数组,但 MSDN 文档中宣传的 Marshal 方法似乎不足以向具有正确内容的非托管内存块提供 IntPtr。
我曾希望通过“Marshal.AllocHGlobal”获得一个 IntPtr,然后使用“Marshal.Copy”分配正确的内容,但似乎函数没有为 IntPtr 数组重载。
对实现此目的的最佳方式有何想法?
提前致谢。
最佳答案
P/Invoke 编码器已经完成了这项工作,您无需提供帮助。只需将函数参数声明为数组:
[DllImport("blah.dll")]
private static extern void SomeFunction(IntPtr[] array);
以防万一:虽然您不必在此处使用 unsafe 关键字,但它没有任何安全之处。当 C 代码写入超过您分配的 block 末尾时,它很容易破坏堆。
关于c# - 在 C# 中编码(marshal) IntPtr 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2595365/