2013-03-12 16 views
6

プロジェクトにはC++ CLIとC#の2つがあります。
C#プロジェクトにはC++ CLIプロジェクトへの参照があります。 C++ CLIプロジェクトである方法がこれを処理しなければならない今C++ CLIに相当するC#動的キーワードは何ですか?

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

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

C++ CLIでこのメソッドを宣言するにはどうすればよいですか?
C++ CLIでデータ型を検出する方法もありますか?

+0

正確にどのバージョンのC++とC#を使用していますか? –

+0

@Ramhound C++ CLIには 'Visual Studio 2012'とC#が付属しており、Visual Studio 2010に同梱されています。 –

+0

.NET FRAMework 4.5アセンブリでは、基本的に.NET Framework 4.0アセンブリを参照しようとしています。少なくとも同じバージョンの.NET Frameworkを対象にしていますか? –

答えて

6

でダイナミックな取得する必要があります

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

しかし、あなただけのすべてのタイプを受け入れるようにしたい場合は、単にSystem::Object^を使用することができます。この属性は誤解を招きます。セマンティクスは非常に困難な時間を与えます。

実際のデータ型を検出するには、arg->GetType()を使用してください。実行時にメンバーの検出と呼び出しにリフレクションやDLRのすべての機能を使用することができます。

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

[returnvalue: System::Runtime::CompilerServices::DynamicAttribute] 
System::Object^ TestReturn(void) 
{ 
    return 1; 
} 
+0

これは非常に感謝しています。あなたは多くの時間を節約しました。どうもありがとうございます。 –

0

あなたは、C#はdynamicとして見ているメソッドのシグネチャを取得するにはSystem::Dynamic::DynamicObjectタイプ

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

+0

私はそれを成功させようとしました。 'DynamicObject'が' Linq'への参照を必要とするようです。 –

+2

おそらく 'System :: Dynamic :: DynamicObject ^'でしょう。いいえ、LINQは必要ありません。しかし、System.Core.DLLアセンブリに含まれるDLRを参照する必要があります。 –