【问题标题】:Does ATL/WTL still require the use of a global _Module variable?ATL/WTL 是否仍需要使用全局 _Module 变量?
【发布时间】:2010-09-16 21:11:35
【问题描述】:

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

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

CAppModule _Module;

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

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

【问题讨论】:

    标签: c++ atl wtl


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      在 stdafx.h 中:

      extern CAppModule _Module;
      

      在实现文件中:

      CAppModule _Module;
      

      【讨论】:

      • 我确实提到了最新的向导生成的代码仍然使用它,对于示例也是如此。仍然没有回答我的问题。
      • 既然你没有没有提到 WTL 示例,它们比 VS 文件夹中的那些更有趣,我认为提一下是完全合适的。
      猜你喜欢
      • 2023-03-19
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多