Я использую 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 # dll для решения этой проблемы. Предполагая, что вы объявляете перечисление как:
public enum class MyEnum
{
MyItem1 = 1,
MyItem2 = 2,
};
Вы можете просто написать:
auto enumName = Enum::GetName(MyEnum::typeid, MyEnum::MyItem1); // returns "MyItem1"
Изменить: я заметил, теперь часть VS2010. Поэтому я не уверен, подойдет ли мое решение для вас.