6

有两个项目,一个是 C++ CLI,另一个是 C#。
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 的所有功能在运行时发现和调用成员。

稍微有用的是在返回类型上使用属性,因为这样 C# 将在使用关键字dynamic时推断语义。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 回答