インターフェイスとして単一のクラス (COM ではなく...単純な C++ クラス) をエクスポートするだけのアンマネージ C++ DLL があります。このクラスを C# で使用したいのですが、単に C# にインポートすることはできないと言われました。
私の C# アプリケーションでこのクラスを使用する正しい方法は何ですか?
クラスFooを想定した簡単な方法:
次に、C# コードを FooWrapper project/dll に依存させ、アンマネージ dll が適切にデプロイされていることを確認します。その方法は、アンマネージ dll によって異なりますが、通常は同じディレクトリで十分です。
関数がクラスのインスタンスに依存しない場合、さらに単純なのは P/Invoke です
この答えは、単一のクラス ライブラリにはやり過ぎかもしれませんが、SWIG は、他の言語から使用する C/C++ クラスを "ラップ" するための優れたソリューションです。C# でうまく動作します。
DllImport が最善の策です。特に構造体を渡す場合は、少しデータ型のマッサージがありますが、それを使ってほとんど何でもできます。
管理対象/非管理対象の境界を橋渡しするには、プロキシ (GoF パターン) 仲介が必要です。
2 つのオプション:
前者はより直接的であり、後者は純粋な C++ -> COM -> .NET の 2 つのステップで構成されます。
場合によっては、独自の C インターフェイスを提供する方が簡単です。 SWIGのセットアップは簡単ではありません。マネージ C++ と C++/CLI を使用していますが、問題ありません。最も簡単な方法は、C ラッパーを実行することでした (ほとんどの言語には C 関数を呼び出す方法があるため、他のほぼすべての言語で使用できます)。