5

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

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

CAppModule _Module;

让 ATL 正常工作。但最近我在某处读到这可能不再需要(但向导生成的代码仍然使用它)。我还通过 Visual C++ 包含目录进行了搜索,它只在几个地方找到了 _Module - 最值得注意的是 ATL COM 注册表的东西。

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

4

2 回答 2

6

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

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

于 2008-10-31T15:16:18.333 回答
1

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

在 stdafx.h 中:

extern CAppModule _Module;

在实现文件中:

CAppModule _Module;
于 2008-10-14T06:58:15.440 回答