Чтобы получить сигнатуру метода, который C# видит, как dynamic
:
void TestMethod([System::Runtime::CompilerServices::DynamicAttribute] System::Object^ arg)
{
}
Но если вы просто хотите, чтобы принимать все типы, вы можете просто использовать System::Object^
. Атрибут вводит в заблуждение, так как он подразумевает семантику, которую вам очень сложно предоставить.
Чтобы узнать фактический тип данных, используйте arg->GetType()
. Затем вы можете использовать всю силу отражения и/или DLR для обнаружения и вызова элементов во время выполнения.
Немного более полезно использовать атрибут для возвращаемого типа, так как тогда C# будет вызывать семантику dynamic
, когда используется ключевое слово var
.
[returnvalue: System::Runtime::CompilerServices::DynamicAttribute]
System::Object^ TestReturn(void)
{
return 1;
}
Какие версии C++ и C# вы используете точно? –
@Ramhound C++ CLI, который поставляется с 'Visual Studio 2012' и C#, который поставляется с' Visual Studio 2010' –
Итак, вы пытаетесь в основном ссылаться на сборку .NET Framework 4.0 в сборке .NET FRamework 4.5, которая является проблемой. Вы хотя бы нацелены на ту же версию .NET Framework? –