57

C++ から任意の C# 関数を呼び出せるようにする必要があります。http://www.infoq.com/articles/in-process-java-net-integrationは ICLRRuntimeHost::ExecuteInDefaultAppDomain() の使用を提案していますが、これでは次の形式のメソッドしか呼び出せません。int method(string arg)

任意の C# 関数を呼び出す最良の方法は何ですか?

4

8 に答える 8

65

C++ アプリケーションが C# DLL 内の関数を呼び出す方法はいくつかあります。

  1. C++/CLI を中間 DLL として使用する
  2. 逆 P/呼び出し
  3. COM の使用
  4. CLR ホスティングの使用 ( ICLRRuntimeHost::ExecuteInDefaultAppDomain())
  5. プロセス間通信 (IPC)
  6. 編集: HTTP サーバーをホストし、HTTP 動詞 (REST スタイル API など) を介して呼び出す
于 2014-04-20T13:07:43.737 に答える
31

/clrフラグを使用して C++ コードをコンパイルします。これにより、任意の .NET コードを比較的簡単に呼び出すことができます。

例えば:

#include <tchar.h>
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
    System::DateTime now = System::DateTime::Now;
    printf("%d:%d:%d\n", now.Hour, now.Minute, now.Second);

    return 0;
}

これは「C++」としてカウントされますか? まあ、それは明らかに標準 C++ではありません...

于 2009-04-22T19:02:15.227 に答える
6

C++ プログラム (またはその一部) が /clr でコンパイルされてもかまわない場合は、C++/CLI を使用して任意の .NET コードを呼び出すことができます (参照を追加する限り)。 この記事を試してみてください

編集:これは素晴らしいチュートリアルです

もう 1 つの方法は、C# コードを COM として公開することです。

于 2009-04-22T19:18:32.833 に答える
4

最も簡単な方法は、COM 相互運用を使用することです。

于 2009-04-22T18:41:05.187 に答える
1

別のアプローチとして、Luaを使用してCLRオブジェクトをインスタンス化し、実行して、結果を返すことができます。

于 2009-04-22T21:18:38.223 に答える