5

新しい ATL/WTL プロジェクトを開始したばかりですが、グローバル _Module 変数がまだ必要かどうか疑問に思っていました。

私が WTL を使い始めた数年前、(少なくとも ATL 3.0 では) 次のようなグローバル変数を定義する必要がありました。

CAppModule _Module;

ATL が正しく機能するようにします。しかし、最近、これはもう必要ないかもしれないということをどこかで読みました (それでも、ウィザードで生成されたコードはまだそれを使用しています)。また、Visual C++ のインクルード ディレクトリを検索したところ、いくつかの場所 (特に ATL COM レジストリ) で _Module しか検出されませんでした。

最近では、ATL を使用するためにグローバル変数を定義する必要がありますか?

4

2 に答える 2

6

技術的には、ATL/WTL バージョン 7 以降、グローバル インスタンスは必要ありません_Module。以前の ATL/WTL コードは_Module、この特定の名前で参照され、このオブジェクトの 1 つのインスタンスを宣言する必要がありました。_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 に答える