3

我有一个包含大量类的 C++/CLI 项目——这些类有自己的元数据系统。所以我想返回一个动态对象来简化 C# 中的一些用例。但我看不到如何在 C++ 中做到这一点。

在 C# 中,我可以编写以下代码:

dynamic TestThisOut()
{
    return null;
}

void mork()
{
    var d = TestThisOut();
    d.Fork();
}

我想TestThisOut()用 C++/CLI 编写,这样我就可以像在上面的“mork”函数中一样使用它(即不必键入动态关键字)。这可能吗?

4

2 回答 2

4

可以在 c++/cli 中创建动态对象,但不能像在 C# 项目中那样使用它。但是,您可以从 C# 中使用它。这是您的操作方法:

在 C++/CLI 中创建返回Object^的属性或方法。使用System::Runtime::CompilerServices::DynamicAttribute标记此属性或方法。你已准备好出发。

这是我创建的一个快速示例:

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() );
于 2013-03-28T15:10:38.320 回答
2

dynamic是 C# 4.0 关键字。C++ CLI(以及VB.NET)不支持它。

如果你想在 C++ CLI 中使用动态对象,那么你可以使用impromptu-interface库。支持的选项列表。信息来自这个问题

于 2012-05-14T04:28:24.017 回答