(c ++ / cli) C ++ с использованием C # dll для получения любого имени члена перечисления

Я использую 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

Решение

Скорее, чем

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

Другие решения

ты должен дать Enum.GetName(typeof(MyTestEnum ), 1); чтобы получить имя значения (E_A) в этом перечислении

0

Примечание: важно, что мы говорим о C ++ — cli. AFAIK, родной с ++ не очень поддерживает рефлексию (ссылка на сайт).

Я думаю, вам не нужен C # dll для решения этой проблемы. Предполагая, что вы объявляете перечисление как:

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

Вы можете просто написать:

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

Изменить: я заметил, теперь часть VS2010. Поэтому я не уверен, подойдет ли мое решение для вас.

0
По вопросам рекламы [email protected]