Open棟梁Project - マイクロソフト系技術情報 Wiki

目次

概要

下記を参照して下さい。基本が解ればなんとかなると思います。

事例

C/C++側のコールバック関数を.NETから呼び出したい

質問

C++のEXEからC#のメソッドを呼び出します。このときの引数でC++側のコールバック関数のアドレスを渡します。このあと、外的要因でC#のDLLから上記のコールバックを呼び出そうとしていますが、コールバック呼び出しで例外エラーとなります。

回答

C++からC#は直接呼べないのでアンマネージド拡張(C++/CLI)でDLLのエクスポート関数経由で.NETに接続する必要があると思います。また、.NETにCの関数ポインタを直接渡しても.NETからの呼び出しはできないので、C++/CLI経由にする必要があると思います。

そこで思いついたのは、

  1. C++/CLI内部でコールバックするメソッドを持ったオブジェクトを作成し、C#のメソッド経由でそのオブジェクトを渡す。C#からこのオブジェクトのメソッドを経由してC++にコールバックする。
  2. C++/CLIでC#から呼ぶためのDLLエクスポート関数を作る。このエクスポート関数にCの関数ポインタを渡してコールバックする。

という2つの方法です。

逆(.NETのコールバック関数をC/C++から呼び出したい)は標準でサポートされているようです。

恐らく、自動的にマーシャリングされるのだと思います。

回答

1.で解決しました。

参考

用語

MSDN

その他

ツール類


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS