有两个项目,一个是 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 中的数据类型?
要获得 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;
}
您可能必须通过System::Dynamic::DynamicObject
类型获得动态
void somemethod(ref System::Dynamic::DynamicObject data) { }