[C#] C++からC#のDLLを呼ぶ方法

以前のエントリで「C#からC++のDLLを呼ぶ方法」を書いた。今回はその逆で「C++からC#のDLL関数を呼ぶ方法」を考える。

これが必要になるのは次のようなシチュエーション。C++で書かれたアプリがあり、今回そのアプリに機能を追加したい。もちろんC++で地道にコーディングすれば機能は追加できるけど工数は多くなる。C#と.NETを使えば工数が少なくなるのは明らかなので、今更C++でコーディングするのはだるい。サクサクっとC#でコーディングして、それをC++から呼べると楽だよね?

方法としては、C++からC#のDLLを直接呼ぶことはできないので、C#で作成したCOMをC++から呼ぶことになる。以下にテストコードを示す。

テストDLL (C#) のソース

DLLを作成するために、Visual C#で「クラスライブラリ」としてプロジェクトを作成する。

プロジェクトの[プロパティ]-[アプリケーション]-[アセンブリ情報]設定で、[アセンブリをCOM参照可能にする]をチェックしておく。

VS2010-properties

そして、COMをビルドしてRegasm.exeを使ってシステムに登録する。

Regasm.exe (アセンブリ登録ツール)
http://msdn.microsoft.com/ja-jp/library/tzat5yw6(v=vs.110).aspx

これでC#(COM)側の準備は完了。

テストアプリ (C++) のソース

C++からC#で書かれたCOMの関数を呼び出す。

参考サイト

マネージドDLLとの接続、ActiveX(COM)による接続、アンマネージドDLLとの接続
http://satoshi3.sakura.ne.jp/memo/connect_dll.htm

C++からC#のdllを参照する際、引数内に構造体があった場合の処理 – C・C++ – 教えて!goo
http://oshiete.goo.ne.jp/qa/5493528.html?from=recommend