Требует ли ATL/WTL использования глобальной переменной _Module?

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

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

CAppModule _Module;

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

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


person Daemin    schedule 13.10.2008    source источник


Ответы (2)


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

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

person Charles    schedule 31.10.2008

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

В stdafx.h:

extern CAppModule _Module;

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

CAppModule _Module;
person Johann Gerell    schedule 14.10.2008
comment
Я упомянул, что последний сгенерированный мастером код все еще использует его, то же самое и для примеров. Все равно не отвечает на мой вопрос. - person Daemin; 16.10.2008
comment
Поскольку вы не упомянули образцы WTL, которые более интересны, чем те, что находятся в папках VS, я счел вполне уместным упомянуть файлы . - person Johann Gerell; 18.10.2008