c# - 将 C++/CLI 中的动态对象返回到 C#

标签 c# dynamic c++-cli

我有一个包含大量类的 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::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() );

关于c# - 将 C++/CLI 中的动态对象返回到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10577439/

相关文章:

c# - Entity Framework 运行直接查询

c# - 无法将 ref enum 转换为 ref dynamic?

c# - 如何在 C# 中使用 Open XML SDK 将 doc 转换为 docx

casting - 将 int 转换为枚举

c# - C#如何确保完整性?(DLL未修改)

c# - Resharper 中的提示可能不正确 "Possible ' System.NullReferenceException'"

c++ - CString 的动态 3 维数组中的内存泄漏

memory-management - C++/CLI 资源管理困惑

c# - 未知服务器标记 'rsweb:ReportViewer'

iOS 动态创建 UILabel