将 C++/CLI 中的动态对象返回到 C#
本文关键字:对象 返回 动态 C++ CLI | 更新日期: 2023-09-27 18:34:07
我有一个包装大量类的 C++/CLI 项目——这些类有自己的元数据系统。所以我想返回一个动态对象,以使一些用例在 C# 中变得简单。但我C++看不出如何做到这一点。
在 C# 中,我可以编写以下内容:
dynamic TestThisOut()
{
return null;
}
void mork()
{
var d = TestThisOut();
d.Fork();
}
我想用 C++/CLI 编写TestThisOut()
,这样我就可以像在上面的"mork"函数中一样使用它(即不必键入动态关键字)。这可能吗?
您可以在 c++/cli 中创建一个动态对象,只是不能像在 C# 项目中那样在那里使用它。但是,您可以从 C# 使用它。以下是您的操作方法:
在 C++/CLI 中,创建一个返回 Object^ 的属性或方法。使用 System::Runtime::CompilerServices::D ynamicAttribute 标记此属性或方法。你很好去。
这是我创建的快速示例:
namespace ClassLibrary1
{
using namespace System;
using namespace System::Dynamic;
public ref class Class1 : public DynamicObject
{
public:
[System::Runtime::CompilerServices::Dynamic]
static property Object^ Global
{
public:
Object^ get()
{
return gcnew Class1();
}
}
public:
String^ Test()
{
return "Test";
}
};
}
还有我的 C# 使用者:
Console.WriteLine( ClassLibrary1.Class1.Global.Test() );
dyanmic 是 C# 4.0 关键字。C++ CLI 中(以及 VB.NET)不支持此功能。
如果要在 CLI 中使用动态对象C++则可以使用即兴界面库。支持的选项列表。信息来自这个问题