Open棟梁Project - マイクロソフト系技術情報 Wiki
下記を参照して下さい。基本が解ればなんとかなると思います。
C++のEXEからC#のメソッドを呼び出します。このときの引数でC++側のコールバック関数のアドレスを渡します。このあと、外的要因でC#のDLLから上記のコールバックを呼び出そうとしていますが、コールバック呼び出しで例外エラーとなります。
C++からC#は直接呼べないのでアンマネージド拡張(C++/CLI)でDLLのエクスポート関数経由で.NETに接続する必要があると思います。また、.NETにCの関数ポインタを直接渡しても.NETからの呼び出しはできないので、C++/CLI経由にする必要があると思います。
そこで思いついたのは、
という2つの方法です。
逆(.NETのコールバック関数をC/C++から呼び出したい)は標準でサポートされているようです。
恐らく、自動的にマーシャリングされるのだと思います。
- 行きはマーシャリング(デリゲードからポインタ)
- 帰りもマーシャリング(多分Cにラッパのポインタが渡る)
1.で解決しました。
Win32 DLL と C++/CLIのブリッジDLLを使用して、アンマネージコードからマネージコードを呼び出す。