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

时间:2018-06-01 08:47:37

标签: c# c++ enums c++-cli typeof

我正在使用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 ^'

我该如何解决?

3 个答案:

答案 0 :(得分:1)

而不是

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()

答案 1 :(得分:0)

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

答案 2 :(得分:0)

注意:我们谈论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的一部分。所以我不确定我的解决方案是否适合您。