Какие есть варианты совместного использования enum в С++ и C# — в контексте вопроса, просто констант в идеале, конечно, enum.
Можно ли как то "прозрачно" подойти к решению данного вопроса, чтобы просто определять enum ы в неком хедере и включать их в проекты на С# и C++.
Этот enum что то вроде ID пакета которые гуляют между проектами написанными на разных языках.
Спасибо.
Здравствуйте, Sazabis, Вы писали:
S>Какие есть варианты совместного использования enum в С++ и C# — в контексте вопроса, просто констант в идеале, конечно, enum. S>Можно ли как то "прозрачно" подойти к решению данного вопроса, чтобы просто определять enum ы в неком хедере и включать их в проекты на С# и C++. S>Этот enum что то вроде ID пакета которые гуляют между проектами написанными на разных языках. S>Спасибо.
В C# нельзя включать хэдеры.
Вы можете сделать управляемые перечисления. В C# такие создаются по умолчанию с помощью ключевого слова enum. В C++/CLI для этого необходимо использовать enum class. Таким образом, подключая сборку, в которой определён enum, к текущему проекту, вы можете свободно им пользоваться безо всяких хэдеров.
Здравствуйте, Sazabis, Вы писали:
S>Какие есть варианты совместного использования enum в С++ и C# — в контексте вопроса, просто констант в идеале, конечно, enum. S>Можно ли как то "прозрачно" подойти к решению данного вопроса, чтобы просто определять enum ы в неком хедере и включать их в проекты на С# и C++. S>Этот enum что то вроде ID пакета которые гуляют между проектами написанными на разных языках.
Например так: В свойствах С++ — проекта объявляете define IsCppProject
Добавляете в C++ — проект заголовочный файл, например Enums.h. В этом файле должны быть только описания енумов.
Содержимое Enums.h примерно такое:
#if IsCppProject
#pragma once
#endif//IsCppProjectenum MyEnum
{
MyEnum_1,
MyEnum_2,
};
// описания других енумов. всякая С++ - специфика только "внутри" IsCppProject
…
В C# — проекте делаете Add\Existing Item… (Add As Link) на этот вот хидер.
Выделяете файл в Solution Explorer и вызываете свойства. В Build Action надо проставить Compile (вместо выставляемого по-умолчанию Content)
Компиляйе и пользуйтесь
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Help will always be given at Hogwarts to those who ask for it.
Здравствуйте, dorofeevilya, Вы писали:
D>В C# нельзя включать хэдеры.
Можно рассмотреть вариант и наоборот, С++ пофиг что включать. D>Вы можете сделать управляемые перечисления. В C# такие создаются по умолчанию с помощью ключевого слова enum. В C++/CLI для этого необходимо использовать enum class. Таким образом, подключая сборку, в которой определён enum, к текущему проекту, вы можете свободно им пользоваться безо всяких хэдеров.
Если это managed код, то не подходит.
Здравствуйте, _FRED_, Вы писали: _FR>Например так: _FR> _FR>В свойствах С++ — проекта объявляете define IsCppProject _FR>Добавляете в C++ — проект заголовочный файл, например Enums.h. В этом файле должны быть только описания енумов. _FR>Содержимое Enums.h примерно такое: _FR>
_FR>#if IsCppProject
_FR>#pragma once
_FR>#endif//IsCppProject
_FR>enum MyEnum
_FR>{
_FR> MyEnum_1,
_FR> MyEnum_2,
_FR>};
_FR>// описания других енумов. всякая С++ - специфика только "внутри" IsCppProject
_FR>…
_FR>
_FR>В C# — проекте делаете Add\Existing Item… (Add As Link) на этот вот хидер. _FR>Выделяете файл в Solution Explorer и вызываете свойства. В Build Action надо проставить Compile (вместо выставляемого по-умолчанию Content) _FR>_FR>Компиляйе и пользуйтесь
Сейчас так и сделано. Были мысли, что это временное решение . Может есть, что "почище" ? (тобишь без корявых ifdef ибо реально приходиться еще и namespace вставлять и модификатор доступа...)
Re: Интеграция enum c С++ проектом
От:
Аноним
Дата:
24.10.08 14:23
Оценка:
Здравствуйте, Sazabis, Вы писали:
S>Какие есть варианты совместного использования enum в С++ и C# — в контексте вопроса, просто констант в идеале, конечно, enum. S>Можно ли как то "прозрачно" подойти к решению данного вопроса, чтобы просто определять enum ы в неком хедере и включать их в проекты на С# и C++. S>Этот enum что то вроде ID пакета которые гуляют между проектами написанными на разных языках. S>Спасибо.
А как происходит общение между С++ и С#? Если COM, то можно попробовать что-нибудь в IDL наваять.
Здравствуйте, Sazabis, Вы писали:
S>Сейчас так и сделано. Были мысли, что это временное решение . Может есть, что "почище" ? (тобишь без корявых ifdef ибо реально приходиться еще и namespace вставлять и модификатор доступа...)
Можно описать енумы в каком нибудь легкопарсимом формате, например XML, а потом по нему генерить и плюсовый хидер и исходник на шарпе.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>