ATL/WTL是否仍然需要使用全局_Module变量

Does ATL/WTL still require the use of a global _Module variable?

本文关键字:全局 变量 Module WTL 是否 ATL      更新时间:2023-10-16

我刚开始一个新的ATL/WTL项目,我想知道是否仍然需要全局_Module变量?

几年前,当我开始使用WTL时,需要(至少对于ATL3.0)定义一个全局变量,例如:

CAppModule _Module;

使ATL正常工作。但最近我在某个地方读到,这可能不再需要了(但向导生成的代码仍然使用它)。此外,我还搜索了Visual C++include目录,它只在几个地方找到了_Module,最引人注目的是ATLCOM注册表。

那么,现在我还需要定义一个全局变量来使用ATL吗?

从技术上讲,自ATL/WTL版本7以来,您不需要全局_Module实例。早期的ATL/WTL代码使用此特定名称引用_Module,并希望您声明此对象的单个实例。此后,它被一个名为_AtlBaseModule的实例对象所取代,该对象在atlcore.h中自动为您声明。

话虽如此,一些最好的WTL功能包含在CAppModule及其基类CComModule中。自动COM注册、消息循环处理等。因此,大多数基于WTL的应用程序仍然需要CComModule基类的单例实例。但是,它不需要命名为_Module

在最新WTL版本的示例项目中,这一点仍在使用。

在stdafx.h:中

extern CAppModule _Module;

实施文件中:

CAppModule _Module;