0

在我的 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)    ;

};

建议表示赞赏。

4

1 回答 1

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上课!

于 2013-02-14T18:15:14.490 回答