2010-11-26 9 views
10

C++(Native、C++ CLI)コードからC#クラスメソッドを呼び出す方法は何ですか?簡単でエレガントな方法が必要ですC#をC++から呼び出す方法

+3

考えられるかもしれないほど涼しい[C++からのC#コードの呼び出し] –

+0

(http://stackoverflow.com/questions/778590/calling-c-sharp-code-from-c) – cdiggins

答えて

9

C#アセンブリをCOMで表示し、COMインターフェイスを使用します。これは私が知る限り自己でIPCを作ったのと同じ働きをさせる唯一の方法です。この問題は、.NETアセンブリが実行され、C++がネイティブC++環境で実行されなければならない.NET環境から発生します。

通信の唯一の方法は、プロセスを「分離する」必要があるため、IPCメカニズム(ソケット、...)またはCOMを使用することです。ここで

は、COMベースのソリューションのためのチュートリアルです:

+2

サーシャには実際には2つの方法があります。 – gideon

+1

うわー、 "デカップリング"の提案は必要ありません。 ".Net"環境は基本的にmscoree.dllであり、ネイティブプロセスで読み込むことができます。 – MSalters

9

サーシャGoldshteinこのようなもののための男です:

はそれを行うには、いくつかの方法が再びあります。 1. Reverse P/Invoke(.NETデリゲートがコールバックとして渡されてから開始する必要があります。これは、.NETコードで「アクション」が開始された場合にのみ有効です)。 2. COM相互運用性(すべての.NETクラスは、明示的なインタフェースの有無にかかわらずCOMオブジェクトでもあります)。 3. C++/CLIラッパークラス。

http://blogs.microsoft.co.il/blogs/sasha/archive/2008/02/16/net-to-c-bridge.aspx

参照してくださいを参照してください:
http://www.gregcons.com/KateBlog/CallingManagedCodeFromNativeCode.aspx

10

あなたが「CLR Hostingと呼ばれるものを使用してネイティブC++プログラム内の任意のCLRアセンブリ(C#の、VB.NET、F#のを、...)を埋め込むことができます"これは、ネイティブプログラム(SQL Serverなど)が.NETコード拡張をサポートする方法です。例えば。 SQL ServerのSQL CLR

あなたは

詳細MSDN、またはジェフリヒターの本CLR via C#に見つけることができます.NET 4に.NET 2.0およびCLRCreateInstance()ためCorBindToRuntimeEx()を使用してネイティブプロセスにCLRをロードします。

+0

+1クール!これについて知りませんでした! – gideon

-1

最も簡単な方法は、C++/CLIを使用することです。あなたのコードでそれを使用することができない場合は、ラッパーdllを書いて、そのdllを呼び出します。

+1

方向が間違っています – user496949

関連する問題