在c#中使用myStruct制作IntPtr,但是c ++ dll期待myStruct *,而不是IntPtr

时间:2013-02-14 18:07:53

标签: c# c++-cli

在我的c#main中,我做了

        myStruct ret_vals;
        IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(ret_vals));

        Marshal.StructureToPtr(ret_vals, ptr, false);

MyStruct有一个指向其中另一个结构的指针。根据Intelllisense(编译错误),我的C ++ dll函数期望指向MyStruct,而不是IntPtr。以下内容无法编译

       DoAT.atClass1 cl = new DoAT.atClass1();

      cl.read_file( ptr);

顺便说一句,我的c ++函数声明为

    public ref class atClass1
{
    public:
          int read_file(MyStruct & ret_vals)    ;

};

建议表示赞赏。

1 个答案:

答案 0 :(得分:2)

在C ++ / CLI中使用引用时不应使用&,就像在常规C ++中一样,而是使用%。这意味着您必须如此定义C ++ / CLI函数:

public ref class atClass1
{
public:
    int read_file(MyStruct % ret_vals);
};

这样你就可以使用.NET参考参数调用你的函数:

DoAT.atClass1 cl = new DoAT.atClass1();
cl.read_file(ref ret_vals);

无需Marshal班级!