我正在使用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 ^'
我该如何解决?
答案 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的一部分。所以我不确定我的解决方案是否适合您。