#c# #c #plugins #interop
#c# #c #Плагины #взаимодействие
Вопрос:
Я хотел бы написать плагин (DLL) для приложения на C , но я хотел бы использовать C #. Возможно ли это? У меня нет доступа к коду на C , поэтому я не могу его модифицировать.
Из того, что я собрал, приложение на C (хост) просто выполняет вызовы различных функций.
Вот пример функции плагина на C :
аннулирование при запуске (HINSTANCE hInstance, HWND hWnd, BOOL bLogSet, int NDLID, char * szHotKey)
Как бы это перевести в C # DLL, которую можно загрузить из этого приложения на C ?
Ответ №1:
Не напрямую, но вы могли бы написать оболочку на C / CLI, которая экспортирует встроенную функцию, а затем делегирует фактическую реализацию сборке C #.
Однако имейте в виду, что это, вероятно, плохая идея — в данном процессе может выполняться только одна версия среды CLR, поэтому, если кто-то другой напишет управляемый плагин для приложения на C , предназначенный для другой версии среды CLR, чем ваш плагин, то это приведет к фатальным ошибкам во время выполнения.
Комментарии:
1. @SofaKng : Именно по этой причине C / CLI существует в первую очередь, поэтому в любом руководстве по C / CLI, скорее всего, будет рассказано о чем-то подобном.
2. начиная с Framework 4.0, они теперь поддерживают несколько версий среды CLR, загруженных в один процесс, см. Термины In-Process Side-by-Side или In-Proc SxS. Один из вариантов использования этого был специально для плагинов, насколько я понимаю.
Ответ №2:
Этот проект создает DLL-экспорт для статических методов в классах. Это может быть более чистым решением.