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

Я использую VS2010, я пытаюсь использовать C # dll, чтобы получить любое имя члена enum в C ++,

My C # dll исходный код:

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

My 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 голосов
/ 01 июня 2018

Вместо

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

0 голосов
/ 06 июня 2018

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

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

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

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

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

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

0 голосов
/ 01 июня 2018

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

...