2012-03-05 6 views
1

私はC#アプリケーションのいくつかのインスタンスを作成するC++クラス用のC++/CLIラッパーを用意しています。呼び出し関数からバッファを受け取り、recvへの呼び出しを受け取ったC++コードも同様に、一部の関数はパラメータとして送信されるパケットを受け取ります。C#からC++にrecv()とsend()のためのバッファを渡す

C++コードには、すべてのパケット構造体を定義するいくつかの構造体があり、そのポインタはパラメータとして使用されます。同様の方法でパックされた同等のC#構造体は、私が知らないのは、C++/CLI型で、C#の構造体へのポインタをとる関数のパラメータとして使用でき、C++コードに渡すことができるものです。

ありがとうございました。

+0

コードを表示すると、http://msdn.microsoft.com/en-us/library/ms173184.aspx –

答えて

2

特別な「C++/CLIタイプ」は必要ありません.C++タイプだけが必要です。それが単純なCのようなstruct(仮想メソッドテーブルなどはありません)なら、Marshal::StructureToPtr()を試してみてください。それほど簡単でない場合は、おそらくC#オブジェクトのフィールドからフィールドにコピーする必要があります。

+0

のようないくつかのMSDNページへのリンク以外の本当の回答を得ることができます。 'StructureToPtr'を使用するには'StructLayoutAttribute'、通常は[StructLayout(LayoutKind.Sequential)]を宣言する必要があります。 –

+0

@JN、彼は、C#構造体がC++構造体と同じ方法でメモリに既にレイアウトされていると言っていたので、私は彼がすでに '[StructLayout(LayoutKind.Sequential)]'または '' StructLayout(LayoutKind .Explicit)] 'を正しい' [FieldOffset] 'で置き換えます。 – svick

+0

あなたはおそらく正しいでしょう、とにかくはっきりしています;)。 –

関連する問題