gpt4 book ai didi

c# - 在 C# 中编码(marshal) IntPtr 数组

转载 作者:行者123 更新时间:2023-11-30 20:12:28 24 4
gpt4 key购买 nike

我想从 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/

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