Страницы

Поиск по вопросам

пятница, 1 февраля 2019 г.

Взаимодействие C# и C++

Есть dll-ка написанная на C# и есть программа написанная на Borland С++ которая жаждет использовать методы реализованные в dll-ке.
Вопрос: Как это взаимодействие лучше организовать если:
dll-ка при необходимости (если такое изменение понадобится для организации взаимодействия с С++) может превратиться в exe или даже службу некоторые методы реализованные в dll в силу особенностей .Net ощутимо долго отрабатывают при первом вызове. Да и dll-ке желательно проводить некоторую подготовительную работу (обновлять используемые файлы и тп.) и лучше если она будет делать это один раз за весь цикл работы вызывающей программы. dllка полностью в моей власти могу изменять её код как мне угодно. программа на C++ вне моей власти. Максимум что мне доступно-объяснить разработчикам как использовать мою dllку. Желательна схема не требующая дополнительных действий (перерегистрация/перезапись реестра/переустановка компонентов и т.п.) при обновлении dllки. производительность критична.
PS: Отдельное спасибо за пример реализации такого взаимодействия на Builder C++


Ответ

На мой взгляд самый простой способ - это написание промежуточной dll на C++\CLI, который позволяет с одной стороны нормально экспортировать методы через __declspec(dllexport), а с другой нормально вызывать методы из библиотек, которые написаны на C#.
Когда сам интересовался этим вопросом, то плагины для VS не работали корректно, по-моему, из-за кирилицы (может за пару лет стало лучше), а вручную декомпилировать библиотеку и вносить изменения в MSIL быстро надоело.

Комментариев нет:

Отправить комментарий