Ist ATL / WTL erfordern immer noch die Verwendung eines globalen _Module Variable?
Frage
Ich fange gerade ein neues ATL / WTL Projekt und ich frage mich, ob die globale Variable _Module noch erforderlich?
ein paar Jahren, als ich anfing mit WTL Arbeits es erforderlich war (zumindest für ATL 3.0), die Sie eine globale Variable definieren, wie:
CAppModule _Module;
Um ATL richtig zu arbeiten. Aber in letzter Zeit habe ich irgendwo gelesen, dass dies möglicherweise nicht mehr benötigt werden (noch der Assistent generierte Code noch verwendet es). Ich habe auch eine Suche über die Visual C ++ Verzeichnisse enthalten und es nahm nur _Module an einigen Stellen bereits -. Vor allem der ATL COM-Registrierung Sachen
So tun noch ich brauche eine globale Variable zu definieren, ATL zu verwenden, in diesen Tagen?
Lösung
Technisch Sie brauchen nicht eine globale _Module
Instanz seit ATL / WTL Version 7. Frühere ATL / WTL Code verwiesen _Module
von diesem bestimmten Namen und Sie erwartet eine einzelne Instanz dieses Objekts zu erklären. Dies ist inzwischen durch ein einziges Instanz-Objekt namens _AtlBaseModule
ersetzt worden, die automatisch für Sie in atlcore.h deklariert wird.
Having said that, obwohl, einige der besten WTL Funktionen innerhalb CAppModule und seine Basisklasse CComModule enthalten. Automatische COM-Registrierung Nachrichtenschleife Handhabung usw. So sind die meisten nicht-trivialen WTL-basierte Anwendungen wollen immer noch eine einzelne Instanz einer CComModule Basisklasse. Allerdings braucht es nicht genannt _Module
werden.
Andere Tipps
In den Beispielprojekten der neuesten WTL-Version wird diese noch verwendet wird.
In stdafx.h:
extern CAppModule _Module;
In Implementierungsdateien:
CAppModule _Module;