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

时间:2008-10-13 12:46:56

标签: c++ atl wtl

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

当我开始使用WTL几年后,您需要(至少对于ATL 3.0)定义一个全局变量,例如:

CAppModule _Module;

让ATL正常工作。但是最近我在某处读到了这可能不再需要了(但是向导生成的代码仍然使用它)。我还搜索了Visual C ++ include目录,它只在几个地方选择了_Module - 最着名的是ATL COM注册表内容。

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

2 个答案:

答案 0 :(得分:5)

从技术上讲,从ATL / WTL版本7开始,您不需要全局_Module实例。之前的ATL / WTL代码通过此特定名称引用_Module,并且您希望声明此对象的单个实例。这已被替换为在atlcore.h中为您自动声明的名为_AtlBaseModule的单个实例对象。

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

答案 1 :(得分:1)

在最新WTL版本的示例项目中,仍然使用它。

在stdafx.h中:

extern CAppModule _Module;

在实施文件中:

CAppModule _Module;