将 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++/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++则可以使用即兴界面库。支持的选项列表。信息来自这个问题