ATL / WTL все еще требует использования глобальной переменной _Module? - PullRequest
3 голосов
/ 13 октября 2008

Я только запускаю новый проект ATL / WTL, и мне было интересно, по-прежнему ли требуется глобальная переменная _Module?

Несколько лет назад, когда я начал работать с WTL, требовалось (по крайней мере, для ATL 3.0) определить глобальную переменную, например:

CAppModule _Module;

Чтобы заставить ATL работать правильно. Но недавно я где-то читал, что это больше не требуется (хотя сгенерированный мастером код все еще использует его). Кроме того, я выполнил поиск по каталогам включения Visual C ++, и он обнаружил _Module только в нескольких местах, особенно в реестре ATL COM.

Так что мне все еще нужно определить глобальную переменную для использования ATL в эти дни?

Ответы [ 2 ]

5 голосов
/ 31 октября 2008

Технически вам не нужен глобальный _Module экземпляр начиная с версии 7. ATL / WTL. Ранее код ATL / WTL ссылался _Module на это конкретное имя и ожидал, что вы объявите один экземпляр этого объекта. С тех пор он был заменен одним экземпляром объекта с именем _AtlBaseModule, который автоматически объявляется для вас в atlcore.h.

Тем не менее, некоторые из лучших функций WTL содержатся в CAppModule и его базовом классе CComModule. Автоматическая регистрация COM, обработка цикла сообщений и т. Д. Таким образом, большинству нетривиальных приложений на основе WTL по-прежнему требуется единичный экземпляр базового класса CComModule. Однако его не нужно называть _Module.

1 голос
/ 14 октября 2008

В примерах проектов последней версии WTL это все еще используется.

В stdafx.h:

extern CAppModule _Module;

В файлах реализации:

CAppModule _Module;
...