У меня есть приложение, которое реализовано на C++. В приложении есть API-интерфейс плагина, в котором вы можете скомпилировать dll и поместить их в определенное место, и они будут автоматически загружены в хост-приложение при его запуске, настраивая функциональность.Как реализовать C++ ATL/COM EXE-сервер через плагин DLL
Есть ли способ скомпилировать dll с использованием ATL таким образом, чтобы плагин dll «преобразовал» приложение в COM-сервер exe.
Следующий код атрибута ATL будет работать, если бы это был сервер InProc, но это не InProc:
[module(dll, ...)];
Для сервера ехе мне нужно:
[module(exe, ...)];
Однако компилятор дает я ошибаюсь в этом, потому что я на самом деле собираю dll, поэтому я вынужден использовать следующее:
[module(unspecified, ...)];
Это компилируется нормально, и MSDN для «неопределенного» варианта говорит:
Отключает инъекцию АТЛИ код, связанный с атрибутом модуля: в инъекции класса ATL модуля, глобальный экземпляр _AtlModule и запись функций точечных. ... атрибутов в проекте.
Итак, во-первых, возможно ли сделать exe на COM-сервер через плагин dll? Во-вторых, если да, то какой будет правильный «класс модуля ATL, глобальный экземпляр _AtlModule и функции ввода», чтобы добавить в проект, чтобы он работал правильно.
- Приложение является стандартным приложением Windows, поэтому его основной точкой ввода является функция WinMain().
- Плагин dll будет задерживаться, , так что он не мгновенно загружается exe.
Я немного любитель COM, а документация COM/ATL настолько глубока и настолько обширна и настолько широка, что я даже не знаю с чего начать.
Итак, у вас есть два приложения: A (с API-интерфейсом плагина) и B (что делает забавные вещи). Вы хотите написать DLL-плагин для A, который вызывает B. Это правильно? Если да, то вы хотите сделать B COM-сервером exe, а затем написать отдельную DLL-плагин для A, который CoCreateInstance B (как сервер, не обслуживающий процесс), а затем вызывает B. –
Нет, это наоборот вокруг. У меня есть приложение A (с API-интерфейсом плагина) и B. Я хочу написать DLL-плагин для A, который превращает A в COM-сервер exe, так что B может вызывать CoCreateInstance A как сервер вне процесса. –