ネイティブC++のDLLを使用しているネイティブC++コードのクライアントアプリケーションがあります。私はこれらのコードをc#dllと接続する可能性を調査しています。これは、書くのがはるかに簡単だからです。私はLoadLibraryでロード可能で、C#DLLへの呼び出しを渡すことができるC++/cliブリッジdllを書くことに決めました。C++とC#コードをC++/cliブリッジで接続する
クライアントとdllとの間の通信は、クライアントがdllがクライアントと通信するインターフェイスオブジェクトへのポインタを渡すようなものです。私はこのオブジェクトをC++コードでラップして、それを使用するためのC#コードを作成しました。
__declspec(dllexport)でいくつかの関数を公開し、それらの呼び出しをc#dllに渡す必要があるため、渡すC#インターフェイスへのポインタが必要です。私はgcroot <>ラッパーでc#オブジェクトを使用したかったのですが、問題はこれらの2つのdllの間に循環依存関係があることです。 C#dllはラッパークラスを使用できるようにブリッジDLLを参照する必要があり、ブリッジDLLはインターフェイスクラスを使用するためにC#dllを参照する必要があります。
私はgcrootでC#オブジェクトをラップするのではなくCOMを使うことができますが、むしろそうしたいと思います。これを回避する方法はありますか?
C#からC++に関数ポイント/イベントまたはデリゲートを渡すことはできません。私はいくつかの高度なタイマーのものについては、C#から簡単にC + +のイベントを処理することができます知っている#。 – CodingBarfield
これは古い投稿ですが、http://stackoverflow.com/questions/13293888/how-to-call-ac-sharp-library-from-native-c-using-c-cli-and-ijwを参照してくださいC++/CLI Wrapperを介して管理されていないコードでC#ライブラリを使用する方法の詳細については、 – amalgamate