Интеграция enum c С++ проектом
От: Sazabis  
Дата: 24.10.08 09:30
Оценка:
Какие есть варианты совместного использования enum в С++ и C# — в контексте вопроса, просто констант в идеале, конечно, enum.
Можно ли как то "прозрачно" подойти к решению данного вопроса, чтобы просто определять enum ы в неком хедере и включать их в проекты на С# и C++.
Этот enum что то вроде ID пакета которые гуляют между проектами написанными на разных языках.
Спасибо.
Re: Интеграция enum c С++ проектом
От: dorofeevilya Россия  
Дата: 24.10.08 11:35
Оценка:
Здравствуйте, Sazabis, Вы писали:

S>Какие есть варианты совместного использования enum в С++ и C# — в контексте вопроса, просто констант в идеале, конечно, enum.

S>Можно ли как то "прозрачно" подойти к решению данного вопроса, чтобы просто определять enum ы в неком хедере и включать их в проекты на С# и C++.
S>Этот enum что то вроде ID пакета которые гуляют между проектами написанными на разных языках.
S>Спасибо.

В C# нельзя включать хэдеры.

Вы можете сделать управляемые перечисления. В C# такие создаются по умолчанию с помощью ключевого слова enum. В C++/CLI для этого необходимо использовать enum class. Таким образом, подключая сборку, в которой определён enum, к текущему проекту, вы можете свободно им пользоваться безо всяких хэдеров.
Re: Интеграция enum c С++ проектом
От: _FRED_ Черногория
Дата: 24.10.08 12:32
Оценка:
Здравствуйте, Sazabis, Вы писали:

S>Какие есть варианты совместного использования enum в С++ и C# — в контексте вопроса, просто констант в идеале, конечно, enum.

S>Можно ли как то "прозрачно" подойти к решению данного вопроса, чтобы просто определять enum ы в неком хедере и включать их в проекты на С# и C++.
S>Этот enum что то вроде ID пакета которые гуляют между проектами написанными на разных языках.

Например так:
  1. В свойствах С++ — проекта объявляете define IsCppProject
  2. Добавляете в C++ — проект заголовочный файл, например Enums.h. В этом файле должны быть только описания енумов.
  3. Содержимое Enums.h примерно такое:
    #if IsCppProject
    #pragma once
    #endif //IsCppProject
    
    enum MyEnum
    {
        MyEnum_1,
        MyEnum_2,
    };
    
    // описания других енумов. всякая С++ - специфика только "внутри" IsCppProject

  4. В C# — проекте делаете Add\Existing Item… (Add As Link) на этот вот хидер.
  5. Выделяете файл в 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.
Re[2]: Интеграция enum c С++ проектом
От: Sazabis  
Дата: 24.10.08 13:33
Оценка:
Здравствуйте, dorofeevilya, Вы писали:

D>В C# нельзя включать хэдеры.

Можно рассмотреть вариант и наоборот, С++ пофиг что включать.
D>Вы можете сделать управляемые перечисления. В C# такие создаются по умолчанию с помощью ключевого слова enum. В C++/CLI для этого необходимо использовать enum class. Таким образом, подключая сборку, в которой определён enum, к текущему проекту, вы можете свободно им пользоваться безо всяких хэдеров.
Если это managed код, то не подходит.
Re[2]: Интеграция enum c С++ проектом
От: Sazabis  
Дата: 24.10.08 13:37
Оценка:
Здравствуйте, _FRED_, Вы писали:
_FR>Например так:
_FR>

    _FR>
  1. В свойствах С++ — проекта объявляете define IsCppProject
    _FR>
  2. Добавляете в C++ — проект заголовочный файл, например Enums.h. В этом файле должны быть только описания енумов.
    _FR>
  3. Содержимое 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>
  4. В C# — проекте делаете Add\Existing Item… (Add As Link) на этот вот хидер.
    _FR>
  5. Выделяете файл в 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 наваять.
Re[3]: Интеграция enum c С++ проектом
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 25.10.08 23:34
Оценка:
Здравствуйте, Sazabis, Вы писали:

S>Сейчас так и сделано. Были мысли, что это временное решение . Может есть, что "почище" ? (тобишь без корявых ifdef ибо реально приходиться еще и namespace вставлять и модификатор доступа...)


Можно описать енумы в каком нибудь легкопарсимом формате, например XML, а потом по нему генерить и плюсовый хидер и исходник на шарпе.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[2]: Интеграция enum c С++ проектом
От: Sazabis  
Дата: 27.10.08 06:37
Оценка:
Здравствуйте, Аноним, Вы писали:
А>А как происходит общение между С++ и С#? Если COM, то можно попробовать что-нибудь в IDL наваять.

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