Добрый день.
У меня возникла необходимость использовать перечисления объявленные в заголовочном файле С++
в управляемом С++ коде. К сожалению, заголовочный файл редактировать нельзя.
Перечисления объявлены следующим образом:
enum MyEnum {
Item1,
Item2,
};
Я хотел бы конвертировать эти перечисления в управляемые на этапе компиляции, чтобы на этапе
выполнения можно было получить имена элементов перечисления с помощью .NET вызова GetNames
Я попытался применить следующие подход:
1.
#define enum enum class
#include "native_header.h"
#undef enum
2.
#define MyEnum class MyManagedEnum
#include "native_header.h"
#undef enum
К сожалению, в обоих случаях компилятор выдает ошибки.
1.
1>error C2332: 'enum' : missing tag name
1>error C2236: unexpected 'class' 'MyEnum'. Did you forget a ';'?
2.
1>error C2332: 'enum' : missing tag name
1>error C2236: unexpected 'class' 'MyManagedEnum'. Did you forget a ';'?
Самое интересное что подобный подход с классами и структурами компилируется без ошибок,
ниже приведен пример кода:
#define class ref class
class MyClass
{
};
#undef class
int main(array<System::String ^> ^args)
{
MyClass^ mc = gcnew MyClass();
return 0;
}
Подскажите пожалуйста, какие еще можно применить подходы для конвертирования неуправляемых
перечислений в управляемые, не затрагивая при этом файл в котором перечисления объявлены?
Спасибо.