Я пытаюсь реорганизовать существующий и за работой Реализация приемника COM-событий. Класс приемника событий написан на C ++ и находится в DLL, которая использует устаревший CComModule
учебный класс. Целью рефакторинга является замена CComModule
новым классом ATL 7.0 CAtlComModule.
Существующая реализация объявляет глобальную переменную где-то в файле .cpp:
CComModule _Module;
Как видите, переменная имеет обычное «волшебное» имя _Module
, Обычная инициализация отсутствует, однако нигде нет вызова CComModule::Init()
и нет также карты объектов COM в проекте DLL. Приемник событий все еще работает, его методы-обработчики событий вызываются должным образом.
Отсутствие какой-либо документации, как перейти от CComModule
в CAtlComModule
Я наивно пытался изменить объявление переменной на это:
CAtlComModule _Module;
Однако это не сработало: после изменения приемник событий перестал работать, то есть его методы обработчика событий больше не вызывались.
Кто-нибудь знает шаги, которые нужно выполнить, чтобы перейти на CAtlComModule
? До сих пор я не смог найти решение ни на MSDN, ни через Google, но, возможно, я не выглядел должным образом …
Кстати: при необходимости я могу предоставить более подробную информацию о реализации приемника событий, но до сих пор я чувствовал, что проблема не в этой области.
Самая простая замена «нового стиля» для CComModule
выглядит так:
class MyModule : public CAtlDllModuleT<MyModule> {};
MyModule _Module;
Других решений пока нет …