1

次の C++ 関数 (DLL によってエクスポートされたもの) を C# から呼び出したいと考えています。

void createVm( 
  const jace::VmLoader& loader, 
  const jace::OptionList& options, 
  bool ignoreUnrecognized = true );

C++ から C# へのプリミティブのマーシャリングに関するドキュメントを見つけましたが、VmLoader や OptionList (どちらもクラス) などの参照型または非プリミティブ型を処理する方法がわかりません。C++ API を C# レイヤーでラップし、実際のメソッド実装のために基になる C++ コードに委譲しようとしています。

何か案は?

4

2 に答える 2

4

AFAIK、P C ++構造を使用した関数への呼び出しは、サポートされている操作ではありません。おそらく動作させることができますが、問題が見つかると思います。

サポートされているのは、C++関数を呼び出す単純なCラッパー関数を作成することです。代わりにラッパー関数を呼び出してください。そうすればうまくいきます。

于 2009-04-24T20:29:00.747 に答える
0

C++ DLL が参照によって渡される型を正しくエクスポートすると仮定すると、DLL を呼び出す軽量のマネージ C++ ラッパーを正しくすることができます。マネージ C++ を使用すると、結果のアセンブリからマネージ インターフェイスをエクスポートしながら、ネイティブ C/C++ ライブラリと dll を直接呼び出すことができます。他の .Net 言語は、他のアセンブリと同じようにマネージ インターフェイスを呼び出すことができます。少し余分なオーバーヘッドがありますが、これが最も簡単な方法です。

于 2009-04-24T21:44:08.523 に答える