C ++ вызывает параметры C #

2

У нас есть собственный код Win32 С++ и набор сборок С#, которые мы хотим вызвать из кода С++. Я излагаю наши варианты как:

  • Используйте COM. Код С# должен быть украшен дополнительными атрибутами (GUID, COMVisible). Сборка С# должна быть зарегистрирована regasm и затем будет доступна для собственного кода С++ через COM.

  • Используйте класс оболочки С++/CLI (ранее управляемый С++). Класс С++ может быть добавлен в собственный проект на С++. Этот класс будет скомпилирован с /clr. Собственный код на С++ вызывал класс С++/CLI, который затем вызывал код .Net. Нет COM. CLR запускается с помощью магии, как требуется, с сортировкой, обработанной расширенными расширениями С++/CLI.

  • Укомплектовать экземпляр CLR в нативном С++-коде.

Я собираюсь сделать скидку на вариант 3, поскольку я не вижу преимуществ над вариантом 2, кроме того, что мы теряем необходимость в классе-оболочке. Итак, вопрос в том, каковы плюсы и минусы варианта 1 по сравнению с вариантом 2?

Спасибо заранее.

Теги:
com
c++-cli
managed-c++
com-interop

3 ответа

3
Лучший ответ

Вариант 2 будет работать лучше всего и быть наиболее бесшовным и поддерживаемым, IMO.

Нет никакого преимущества для варианта 1, который я нашел. Использование С++/CLI, похоже, работает намного лучше, работает быстрее и будет намного проще в целом.

Вы также можете, btw, просто использовать сборку С# напрямую, не имея класса-оболочки. Это требует компиляции любых файлов, которые хотят использовать его с /CLR, но он работает достаточно хорошо.

1

С помощью опции 2 вы также можете довольно просто преобразовать все свое приложение в С++/CLI, чтобы избежать переходов, управляемых/неуправляемых, которые вы получите. Переходы могут быть проблемой в зависимости от того, как вы используете свои ссылочные сборки, т.е. Получаете поражение от производительности.

До сих пор у меня был только положительный опыт работы с С++/CLI и я могу порекомендовать этот маршрут.

1

Для варианта 1 вашему основному профессионалу не нужно писать класс-оболочку, который может быть волосатым в зависимости от вашего проекта.

Для варианта 2 вам не нужно будет изменять вашу управляемую библиотеку, чтобы облегчить неуправляемое использование, что иногда не является вариантом.

Для меня это сводится к тому, где вы хотите изменить свой код.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню