Я только начинаю новый проект ATL / WTL, и мне было интересно, требуется ли по-прежнему глобальная переменная _Module?
Несколько лет назад, когда я начал работать с WTL, требовалось (по крайней мере, для ATL 3.0), чтобы вы определяли глобальную переменную, такую как:
CAppModule _Module;
Чтобы ATL работал правильно. Но недавно я где-то читал, что это может больше не требоваться (но код, сгенерированный мастером, все еще использует его). Также я провел поиск по каталогам Visual C++ include, и он обнаружил _Module только в нескольких местах, в первую очередь в реестре ATL COM.
Так что мне все еще нужно определять глобальную переменную для использования ATL в наши дни?





В примерах проектов последней версии WTL он все еще используется.
В stdafx.h:
extern CAppModule _Module;
В файлах реализации:
CAppModule _Module;
Поскольку вы упомянули в нет образцы WTL, которые более интересны, чем те, что находятся в папках VS, я подумал, что было бы вполне уместно упомянуть файлы.
Технически вам не нужен глобальный экземпляр _Module, так как ATL / WTL версии 7. Ранее код ATL / WTL ссылался на _Module под этим конкретным именем и ожидал, что вы объявите единственный экземпляр этого объекта. С тех пор он был заменен одним экземпляром объекта с именем _AtlBaseModule, который автоматически объявляется для вас в atlcore.h.
При этом некоторые из лучших функций WTL содержатся в CAppModule и его базовом классе CComModule. Автоматическая регистрация COM, обработка цикла сообщений и т. д. Таким образом, большинству нетривиальных приложений на основе WTL по-прежнему требуется одноэлементный экземпляр базового класса CComModule. Однако его не нужно называть _Module.
Я уже упоминал, что последний сгенерированный мастером код все еще использует его, то же самое для образцов. Однако до сих пор не отвечает на мой вопрос.