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