web-dev-qa-db-ja.com

アンマネージC ++からマネージC#関数を呼び出す

アンマネージC++からマネージC#関数を呼び出す方法

18
user186246

または、C#がアンマネージエクスポートを作成できるようにする 私のプロジェクト を使用します。それらは母国語で書かれたかのように消費することができます。

9
Robert Giesecke

最初にCOM相互運用機能を使用しましたが、はるかに単純なため、今ではIJWに切り替えました(正常に機能します)。ラッパーC++/CLR DLL(/ clrでコンパイル)があります。

簡単な例(静的を使用して呼び出しを簡単にする):

namespace MyClasses       
{
    public class MyClass
    {
        public static void DoSomething()
        {
            MessageBox.Show("Hello World");
        }
    }
}

DLLでは、次のように名前空間を参照できます。

using namespace MyClasses;

そしてそれを呼んでください:

__declspec(dllexport) void CallManagedCode()
{
    MyClass::DoSomething();
}

これで、マネージコードを呼び出すアンマネージDLL export "CallManagedCode"ができました。

もちろん、マネージド/アンマネージド境界間でデータを変換する必要もあります。 VS2008以降、Microsoftには、アンマネージタイプとマネージタイプを変換するためのマーシャルヘルパーが含まれています。 http://msdn.Microsoft.com/en-us/library/bb384865.aspx を参照してください。

5
Daniel Rose

私はC++/CLIラッパークラスを使用しました ここで説明 そして実装は比較的簡単でした。

1
Simon

RE:アンマネージC++アプリケーションからマネージC#コードを呼び出す方法は?

http://www.tech-archive.net/Archive/DotNet/Microsoft.public.dotnet.framework.interop/2005-05/msg00030.html

アンマネージC++コードからマネージ.NETC#COMオブジェクトを呼び出す.。

http://www.codeproject.com/KB/cs/ManagedCOM.aspx

マネージC#DLLをアンマネージC++プロジェクトでラップする:dll。

http://www.experts-exchange.com/Programming/Languages/.NET/Q_22006727.html

0
ratty