将对象从引用的托管dll传递到C ++ / CLI包装器

时间:2014-02-04 16:23:01

标签: dll c++-cli wrapper

所以,我正在编写一个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直接传递给包装器?

1 个答案:

答案 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#所看到的。