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

StackOverflow https://stackoverflow.com/questions/197468

  •  10-07-2019
  •  | 
  •  

Вопрос

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

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

CAppModule _Module;

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

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

Это было полезно?

Решение

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

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

Другие советы

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

В stdafx.h:

extern CAppModule _Module;

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

CAppModule _Module;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top