今日は出勤前に話が解決した(笑)。
昨日のサンプルは「C#からC関数を呼び、その中からC#メソッドを関数として呼び返す」ものだった。つまりこの例だとEXE自体はC#で作っていなければならなかったわけである。
そうではなくてCのEXEから直接C#のDLLにアクセスする場合はどうするか。これはCの側のメイン・プログラムをC++/CLIで作ってやって、そのusing文の中でC#モジュールを指定してやる。C++/CLI自体は「C++のニセモノ」あるいは「文法その他をC++のそれに似せたC#」とでもいうべきもので、CでもC++でもない。ただ、その中からC言語の関数を呼ぶことは普通にできるし、Cで作ったobjファイルをリンクしてひとつのexe(ないしdll)にすることもできる。
注意すべき点はCのソースファイルをC++/CLIのプロジェクトに含める場合、ソースファイルのプロパティ画面で「共通言語ランタイム サポートを使用しない」「プリコンパイル済みヘッダーを使用しない」のふたつを設定しなければならないことである。
昨日のサンプルは「C#からC関数を呼び、その中からC#メソッドを関数として呼び返す」ものだった。つまりこの例だとEXE自体はC#で作っていなければならなかったわけである。
そうではなくてCのEXEから直接C#のDLLにアクセスする場合はどうするか。これはCの側のメイン・プログラムをC++/CLIで作ってやって、そのusing文の中でC#モジュールを指定してやる。C++/CLI自体は「C++のニセモノ」あるいは「文法その他をC++のそれに似せたC#」とでもいうべきもので、CでもC++でもない。ただ、その中からC言語の関数を呼ぶことは普通にできるし、Cで作ったobjファイルをリンクしてひとつのexe(ないしdll)にすることもできる。
注意すべき点はCのソースファイルをC++/CLIのプロジェクトに含める場合、ソースファイルのプロパティ画面で「共通言語ランタイム サポートを使用しない」「プリコンパイル済みヘッダーを使用しない」のふたつを設定しなければならないことである。