我正在尝试将一组对象从C#传递给非托管C ++,似乎没有任何工作。
编译器不会让我假装数组是IntPtr。将数组转换为IntPtr不起作用。我试图传递固定数据的地址,但这也不起作用。
我只需要将一个指针传递给数组的开头,这就太难了。
有任何建议或链接吗?感谢名单!
答案 0 :(得分:1)
你能投射到无效指针吗?确保固定了对象数组。
答案 1 :(得分:1)
最终有效:
答案 2 :(得分:0)
在C#/ Managed方法签名中,使用 [MarshalAs(UnmanagedType.LPArray,SizeParamIndex = 0)] 标记输入参数...
[DllImport(...)]
public void DoTask
(
...,
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] int[] results,
...
);
然后像往常一样调用它。此外,在非托管代码中,您可以修改此数组。我建议您发送一个额外的int告诉非托管代码数组的大小是什么,以防止“数组越界”修改。