Можно ли написать C # DLL (плагин) для приложения на C ?

#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-экспорт для статических методов в классах. Это может быть более чистым решением.