2016-03-11 4 views
0

Я искал другие ответы, похожие на эту тему, но не нашел ничего общего. Я пытаюсь присвоить значения некоторым перечислениям в C#, используя значения, которые помечены как static const в файле C++/CLI, которые скомпилированы в DLL и упоминаются в проекте C#. Все это прекрасно работает, за исключением того, что оно дает мне «выражение, назначенное на« XXX », должно быть постоянным», чего я ожидал бы, если значение C++/CLI не было константой. Мой код C++/CLI автоматически генерируется из файлов сторонних поставщиков, поэтому мои варианты изменения этой стороны крайне ограничены.Назначить значение перечислению C# из C++/CLI const

Вот некоторые выдержки:

Файл ++/CLI C:

public ref class SEVERE_LEVEL sealed { 
    public: 
    static const System::Int32 VALUE = 200; 
    private: 
    SEVERE_LEVEL() {} 
}; 

И C# файл:

public enum LoggerLevel { 
    SevereLevel = SEVERE_LEVEL.VALUE // This gives the "must be constant" error 
} 

Есть несколько различных уровней журнала, каждый из которых определен в их собственный отдельный класс в файле C++/CLI. Я хочу использовать перечисление C# как тип параметра в некоторых вызовах метода, чтобы обеспечить передачу только допустимых значений. Любые идеи, как сделать эту работу или предложения по альтернативным проектам?

+0

Это довольно причудливый генератор кода. Я бы просто попытался замять объявление 'public enum class', как и должно было быть. –

ответ

0

Ключевое слово C++ const не отображается ни на что в .NET.

C++/CLI добавляет новые контекстно-зависимые ключевые слова в соответствие с функциональными возможностями .NET: initonly и literal.

Если вы используете literal System::Int32 VALUE = 200;, тогда он должен работать. Нет никакой магии, чтобы компилятор C# определял перечисления, используя значения, которые не отмечены буквами в метаданных .NET.

+0

Благодарим за предложение! Я завернул автоматически сгенерированные классы в новый класс C++, содержащий элементы, помеченные ключевым словом «literal», равным предыдущим статическим константным членам. Это позволяет мне точно назначить их перечислениям на C#. Благодаря! – Hamo2k1

Смежные вопросы