6

C++ CLI と C# の 2 つのプロジェクトがあります。
C# プロジェクトには、C++ CLI プロジェクトへの参照があります。

C#で私はこれをしたい:

//method signature is somemethod(dynamic data);
somemethod("haaaii");

現在、C++ CLI プロジェクトにあるメソッドはこれを処理する必要があります。

C++ CLI でこのメソッドを宣言する方法は?
また、C++ CLI でデータ型を検出する方法は?

4

2 に答える 2

6

C# で認識されるメソッド シグネチャを取得するには、次のようにしdynamicます。

void TestMethod( [System::Runtime::CompilerServices::DynamicAttribute] System::Object^ arg )
{
}

ただし、すべてのタイプを受け入れたいだけの場合は、単純に を使用できますSystem::Object^。この属性は、提供するのに非常に苦労するセマンティクスを暗示しているため、誤解を招く可能性があります。

実際のデータ型を調べるには、 を使用しますarg->GetType()。その後、実行時にメンバーを検出して呼び出すために、リフレクションや DLR のすべての機能を使用できます。

キーワードが使用されdynamicたときに C# がセマンティクスを推測するため、戻り値の型で属性を使用する方が少し便利です。var

[returnvalue: System::Runtime::CompilerServices::DynamicAttribute]
System::Object^ TestReturn( void )
{
    return 1;
}
于 2013-03-13T06:24:39.997 に答える
0

System::Dynamic::DynamicObjectタイプで動的にする必要があるかもしれません

void somemethod(ref System::Dynamic::DynamicObject data) { }

于 2013-03-12T11:24:56.817 に答える