所以,我正在编写一个C ++ / CLI包装器,我希望它能够与引用的托管(C#)dll中的对象进行交互。更具体地说,在我的C ++ / CLI项目中,我希望有这样的类:
public ref class MyClass
{
public:
void InputPoints(array<Point3d^>^ ptsIn);
};
其中,“Point3d”是来自引用的托管dll的对象 - 称之为“MyGeometryDLL.dll”。这个编译没有任何问题,但是当我在C#项目中使用包装器(也引用“MyGeometryDLL.dll”)时,我无法将Point3d直接传递给包装器,即intellisense检测到:
void MyClass.InputPoints(ValueType[] ptsIn);
如何将Point3d直接传递给包装器?
答案 0 :(得分:1)
所以类Point3d
已经在C#DLL中定义了,对吗?在这种情况下,我认为这可能是克拉的问题。
如果它在C#中声明为public struct Point3d
,则它是值类型,而不是引用类型。这意味着无论何时在C ++ / CLI中使用它,都不会使用^
,也不会调用gcnew
。如果是这种情况,那么您需要将方法声明更改为:
void InputPoints(array<Point3d>^ ptsIn); // No carat on Point3d
C#将其视为ValueType[]
的原因是因为Point3d^
是C ++ / CLI中的合法类型,但它在C#中不存在。一般ValueType
是最接近的东西,所以这就是C#所看到的。