Действительно ли возможно совместно использовать перечислимое объявление между C# и неуправляемым C++?

Для меня

font-size: 0;
line-height: 0;

на упаковке контейнер сделал свое дело.

18
задан sean e 5 June 2009 в 04:55
поделиться

4 ответа

Вы можете использовать один файл .cs и совместно использовать его в обоих проектах. #include в C ++ для файла .cs не должно вызывать проблем.

Это будет пример файла .cs:

#if !__LINE__    
namespace MyNamespace
{
    public 
#endif

// shared enum for both C, C++ and C#
enum MyEnum { myVal1, myVal2 };

#if !__LINE__
}
#endif

Если вы хотите, чтобы несколько перечислений в одном файле, вы можете сделать это (хотя вы должны временно определить public как ничего для C / C ++):

#if __LINE__
#define public
#else
namespace MyNamespace
{
#endif

    public enum MyEnum { MyEnumValue1, MyEnumValue2 };
    public enum MyEnum2 { MyEnum2Value1, MyEnum2Value2 };
    public enum MyEnum3 { MyEnum3Value1, MyEnum3Value2 };

#if __LINE__
#undef public
#else
}
#endif
17
ответ дан 30 November 2019 в 08:38
поделиться

Вы можете открыть библиотеку C # для COM, а затем импортировать библиотеку типов в неуправляемый код - таким образом вы сможете использовать перечисление, определенное в библиотеке C #, в неуправляемая библиотека.

3
ответ дан 30 November 2019 в 08:38
поделиться

Неуправляемые C ++ и C # живут в двух разных мирах, так что нет невозможно использовать одно и то же перечисление без преобразования библиотеки DLL C ++ в управляемую.

И даже тогда вам, вероятно, понадобится дублирование в управляемой DLL C ++.

Перечисление C ++ во многом похоже на список констант, тогда как перечисление C # наследует класс Enum и, таким образом, предоставляет немало "уловок". Как видите, они очень разные.

Если не имеет значения, является ли собственная библиотека C ++ собственной или управляемой, я бы превратил ее в управляемую и обернул бы родную вызовы внутри управляемого уровня C ++.

Таким образом, вы можете дублировать перечисление внутри библиотеки DLL C ++,

0
ответ дан 30 November 2019 в 08:38
поделиться

У меня была такая же проблема в прошлом, и я решил ее с помощью определений препроцессора.

В неуправляемом коде внутри заголовка, который также может быть включен управляемой оболочкой, поместите свой перечисление элементов в #define.

Затем в определениях управляемого и неуправляемого перечисления используйте один и тот же #define для обоих вариантов использования.

Перемещение перечислений между управляемым и неуправляемым миром выглядит немного неприятным (в основном это приведение требуется), но для вызывающего абонента в неуправляемом мире все будет хорошо.

Удачи,

0
ответ дан 30 November 2019 в 08:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: