【发布时间】:2010-07-09 17:49:40
【问题描述】:
我正在尝试将一组对象从 C# 传递到非托管 C++,但似乎没有任何效果。
编译器不会让我假装数组是 IntPtr。将数组转换为 IntPtr 不起作用。我尝试传递固定数据的地址,但这也不起作用。
我只需要传递一个指向数组开头的指针,这变得异常困难。
有什么建议或链接吗?谢谢!
【问题讨论】:
-
您希望如何从非托管代码中看到该数组(即元素类型是什么)?
-
我(希望)在 C# 和 C++ 端都有相同的对象定义。被调用函数有一个指向该类型的指针作为参数。
-
您的意思是 C++ 类定义?它不是那样工作的。 CLR 类的内存布局是实现定义的,您无法从 C++ 中匹配它。您可以做的是让对象实现某个接口,并在非托管大小上提供该接口的非托管定义,然后让 P/Invoke 编组数组。
-
如果我将 CLR 类更改为结构会更容易吗? (两者都可以在程序中工作。)
-
如果你的结构本身不包含任何对象引用,并且如果你想要的是一个结构数组而不是引用数组(因为后者是你实际拥有的数组对象),那么,是的,它应该都能正常工作。
标签: c# c++ arrays marshalling unmanaged