0

私のC#メインでは、私はやった

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

        Marshal.StructureToPtr(ret_vals, ptr, false);

MyStruct には、別の構造体へのポインターがあります。Intelllisense (コンパイル エラー) によると、私の C++ dll の関数は、IntPtr ではなく、MyStruct へのポインターを期待しています。以下はコンパイルされません

       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++ のように、C++/CLI で参照を使用する場合は使用しないでください%。つまり、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 に答える