繁体   English   中英

(c ++ / cli)使用C#dll的C ++获取任何枚举成员名称

[英](c++/cli) C++ using C# dll to get any enum member name

我正在使用VS2010,我尝试使用C#dll来获取C ++中的任何枚举成员名称,

我的C#dll源代码:

namespace CSharpFuncion
{
    public class CSFun
    {
        public string GetEnumName(Enum en)
        {
            return Enum.GetName(typeof(Enum), en);
        }
    }
}

我的C ++代码

#using "CSharpFuncion.dll"
using namespace CSharpFuncion;
CSFun ^ csFun = gcnew CSFun;
cout << csFun->GetEnumName(MyTestEnum::E_A) << endl;

错误信息:

cannot convert parameter from 'MyTestEnum'  to 'System::Enum ^'

我该如何解决?

而不是

public enum MyTestEnum
{
        E_A = 1,
        E_B = 2
};

你需要做到

public enum class MyTestEnum
{
        E_A = 1,
        E_B = 2
};

因此,只需添加class关键字。

并更改return Enum.GetName(typeof(Enum), en); return en.ToString()

您必须提供Enum.GetName(typeof(MyTestEnum ), 1); 获取该枚举中的值(E_A)的名称

注意:我们谈论的是C ++-cli,这一点很重要。 AFAIK,本机c ++并不真正支持反射( link )。

我认为您真的不需要C#dll来解决此问题。 假设您像下面这样声明枚举:

    public enum class MyEnum
    {
        MyItem1 = 1,
        MyItem2 = 2,
    };

您可以简单地写:

    auto enumName = Enum::GetName(MyEnum::typeid, MyEnum::MyItem1);  // returns "MyItem1"

编辑:我现在注意到VS2010部分。 因此,我不确定我的解决方案是否适用于您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM