代码之家  ›  专栏  ›  技术社区  ›  Dominik Grabiec

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

  •  3
  • Dominik Grabiec  · 技术社区  · 16 年前

    我正在启动一个新的ATL/WTL项目,我想知道是否仍然需要全局模块变量?

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

    CAppModule _Module;
    

    使ATL正常工作。但最近我在某个地方读到,这可能不再是必需的(但是向导生成的代码仍然使用它)。我也通过VisualC++中的目录进行了搜索,它只在一些地方找到了SO模块——最明显的是ATL COM注册表的东西。

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

    2 回复  |  直到 16 年前
        1
  •  5
  •   Charles    16 年前

    从技术上讲,你不需要一个全球性的 _Module 自ATL/WTL版本7以来的实例。先前引用的ATL/WTL代码 γ模块 通过这个特定的名称,并期望您声明这个对象的单个实例。这已经被一个名为 _AtlBaseModule 自动在atlcore.h中为您声明。

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

        2
  •  1
  •   Johann Gerell    16 年前

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

    在STDAFX中:

    extern CAppModule _Module;
    

    在实现文件中:

    CAppModule _Module;