Использование неуправляемых enum в управляемом коде
От: SergeyT  
Дата: 27.09.11 13:12
Оценка:
Добрый день.

У меня возникла необходимость использовать перечисления объявленные в заголовочном файле С++
в управляемом С++ коде. К сожалению, заголовочный файл редактировать нельзя.

Перечисления объявлены следующим образом:

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;
}


Подскажите пожалуйста, какие еще можно применить подходы для конвертирования неуправляемых
перечислений в управляемые, не затрагивая при этом файл в котором перечисления объявлены?

Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.