有两个项目,一个是C++ CLI,另一个是C#。
C#项目引用了C++ CLI项目。
我想在C#中做到这一点:
//method signature is somemethod(dynamic data);
somemethod("haaaii");
现在必须在C++ CLI项目中处理这个方法。
如何在C++ CLI中声明此方法?
还有如何检测数据类型在C++ CLI中?
有两个项目,一个是C++ CLI,另一个是C#。
C#项目引用了C++ CLI项目。
我想在C#中做到这一点:
//method signature is somemethod(dynamic data);
somemethod("haaaii");
现在必须在C++ CLI项目中处理这个方法。
如何在C++ CLI中声明此方法?
还有如何检测数据类型在C++ CLI中?
void TestMethod( [System::Runtime::CompilerServices::DynamicAttribute] System::Object^ arg )
{
}
但是如果你只想接受所有类型,你可以简单地使用 System::Object^
。该属性是误导的,因为它暗示了你将会非常难以提供的语义。
要发现实际的数据类型,请使用 arg->GetType()
。然后,您可以使用反射和/或 DLR 的全部功能在运行时发现并调用成员。
更有用的是在返回类型上使用属性,因为这样当使用 var
关键字时,C# 将会推断出 dynamic
语义。
[returnvalue: System::Runtime::CompilerServices::DynamicAttribute]
System::Object^ TestReturn( void )
{
return 1;
}
System::Dynamic::DynamicObject
类型进行动态获取。
void somemethod(ref System::Dynamic::DynamicObject data) { }
DynamicObject
需要引用Linq
。 - Mohsen SarkarSystem::Dynamic::DynamicObject^
。不,它不应该需要使用LINQ。但是您需要引用包含在 System.Core.DLL 程序集中的 DLR。 - Ben Voigt
Visual Studio 2012
一起提供的,而C#则是随Visual Studio 2010
一起提供的。 - Mohsen Sarkar