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