Compileroptionen-Makros

Diese Makros steuern bestimmte Compilerfeatures.

Makro Beschreibung
_ATL_ALL_WARNINGS Ein Symbol, das Fehler in Projekten ermöglicht, die aus früheren Versionen von ATL konvertiert wurden.
_ATL_APARTMENT_THREADED Definieren Sie, ob eines oder mehrere Ihrer Objekte Apartmentthreading verwenden.
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS Macht bestimmte CString Konstruktoren explizit, wodurch unbeabsichtigte Konvertierungen verhindert werden.
_ATL_ENABLE_PTM_WARNING Definieren Sie dieses Makro, damit C++-Standardsyntax erforderlich ist. Er generiert den C4867-Compilerfehler, wenn nicht standardmäßige Syntax verwendet wird, um einen Zeiger auf eine Memberfunktion zu initialisieren.
_ATL_FREE_THREADED Definieren Sie, ob eines oder mehrere Ihrer Objekte freie oder neutrale Threading verwenden.
_ATL_MODULES Ermöglicht ihnen das Kompilieren von ATL-Projekten mit eingeschränkter Berechtigung und Verwendung von ATL mit C++-Modulen.
_ATL_MULTI_THREADED Ein Symbol, das angibt, dass das Projekt Objekte als "Both", "Frei" oder "Neutral" markiert hat. Stattdessen sollte das Makro _ATL_FREE_THREADED verwendet werden.
_ATL_NO_AUTOMATIC_NAMESPACE Ein Symbol, das die Standardmäßige Verwendung von Namespace als ATL verhindert.
_ATL_NO_COM_SUPPORT Ein Symbol, das verhindert, dass COM-bezogener Code mit Ihrem Projekt kompiliert wird.
ATL_NO_VTABLE Ein Symbol, das verhindert, dass der vtable-Zeiger im Konstruktor und Destruktor der Klasse initialisiert wird.
ATL_NOINLINE Ein Symbol, das angibt, dass eine Funktion nicht inlineiert werden soll.
_ATL_SINGLE_THREADED Definieren Sie, ob alle Objekte das Einzelthreadingmodell verwenden.

_ATL_ALL_WARNINGS

Ein Symbol, das Fehler in Projekten ermöglicht, die aus früheren Versionen von ATL konvertiert wurden.

#define _ATL_ALL_WARNINGS

Hinweise

Vor Visual C++ .NET 2002 deaktivierte ATL viele Warnungen und ließ sie deaktiviert, sodass sie nie im Benutzercode angezeigt wurden. Speziell:

  • C4127-bedingter Ausdruck ist konstant

  • C4786 'Identifier': Der Bezeichner wurde in den Debuginformationen auf "Zahl"-Zeichen abgeschnitten.

  • C4201 nicht standardmäßige Erweiterung verwendet : nameless struct/union

  • C4103 'filename': Verwendet #pragma Pack zum Ändern der Ausrichtung

  • C4291 "Deklaration": Es wurde kein übereinstimmende Operator gelöscht; Arbeitsspeicher wird nicht freigegeben, wenn die Initialisierung eine Ausnahme auslöst.

  • C4268 'identifier' : "const" static/global data initialized with compiler-generated default constructor fills the object with zeros

  • Nicht erreichbarer C4702-Code

In Projekten, die aus früheren Versionen konvertiert wurden, werden diese Warnungen weiterhin von den Bibliothekenheadern deaktiviert.

Um dieses Verhalten zu ändern, fügen Sie der Datei (stdafx.h in Visual Studio 2017 und früher) die folgende Zeile pch.h hinzu, bevor Sie Bibliothekenkopfzeilen einschließen.

#define _ATL_ALL_WARNINGS

Wenn dies #define hinzugefügt wird, achten die ATL-Header darauf, den Status dieser Warnungen beizubehalten, sodass sie nicht global deaktiviert werden (oder wenn der Benutzer explizit einzelne Warnungen deaktiviert, nicht zu aktivieren).

Neue Projekte haben diesen #define Satz standardmäßig in pch.h (stdafx.h in Visual Studio 2017 und früher).

_ATL_APARTMENT_THREADED

Definieren Sie, ob eines oder mehrere Ihrer Objekte Apartmentthreading verwenden.

_ATL_APARTMENT_THREADED

Hinweise

Gibt Apartmentthreading an. Weitere Optionen und eine Beschreibung der für ein ATL-Objekt verfügbaren Threadingmodelle finden Sie unter Angeben des Threadingmodells und der Optionen des Project-Assistenten für einfache Objekte ATL.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Macht bestimmte CString Konstruktoren explizit, wodurch unbeabsichtigte Konvertierungen verhindert werden.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Hinweise

Wenn dieser Konstruktor definiert ist, werden alle CString Konstruktoren, die einen einzelnen Parameter verwenden, mit dem expliziten Schlüsselwort kompiliert, wodurch implizite Konvertierungen von Eingabeargumenten verhindert werden. Dies bedeutet beispielsweise, dass beim Definieren, wenn _UNICODE Sie versuchen, eine char* Zeichenfolge als CString Konstruktorargument zu verwenden, ein Compilerfehler resultiert. Verwenden Sie dieses Makro in Situationen, in denen Sie implizite Konvertierungen zwischen schmalen und breiten Zeichenfolgentypen verhindern müssen.

Mithilfe des _T Makros für alle Konstruktorzeichenfolgenargumente können Sie Kompilierungsfehler definieren _ATL_CSTRING_EXPLICIT_CONSTRUCTORS und vermeiden, unabhängig davon, ob _UNICODE sie definiert sind.

_ATL_ENABLE_PTM_WARNING

Definieren Sie dieses Makro, um die Verwendung von ANSI C++-Standardkonformitätssyntax für Zeiger auf Memberfunktionen zu erzwingen. Wenn Sie dieses Makro verwenden, wird der C4867-Compilerfehler generiert, wenn nicht standardmäßige Syntax verwendet wird, um einen Zeiger auf eine Memberfunktion zu initialisieren.

#define _ATL_ENABLE_PTM_WARNING

Hinweise

Die ATL- und MFC-Bibliotheken wurden so geändert, dass sie der verbesserten C++-Standardkonformität des Microsoft C++-Compilers entsprechen. Gemäß dem ANSI C++-Standard sollte die Syntax eines Zeigers auf eine Klassenmememmfunktion lauten &CMyClass::MyFunc.

Wenn _ATL_ENABLE_PTM_WARNING nicht definiert ist (Standardfall), deaktiviert ATL/MFC den C4867-Fehler in Makrozuordnungen (insbesondere Meldungszuordnungen), sodass Code, der in früheren Versionen erstellt wurde, weiterhin wie zuvor erstellt werden kann. Wenn Sie definieren _ATL_ENABLE_PTM_WARNING, sollte Ihr Code dem C++-Standard entsprechen.

Die nicht standardmäßige Form ist jedoch veraltet. Sie müssen vorhandenen Code in die C++-Standardsyntax verschieben. Beispielsweise folgender Code:

BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
   ON_COMMAND(ID_MYCOMMAND, OnMycommand)
END_MESSAGE_MAP()

Änderung erforderlich in:

BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
   ON_COMMAND(ID_MYCOMMAND, &CMFCListViewDoc::OnMycommand)
END_MESSAGE_MAP()

Fügen Sie für Kartenmakros das kaufmännische Und-Zeichen "&" hinzu. Sie sollten das Zeichen nicht erneut in Ihrem Code hinzufügen.

_ATL_FREE_THREADED

Definieren Sie, ob eines oder mehrere Ihrer Objekte freie oder neutrale Threading verwenden.

_ATL_FREE_THREADED

Hinweise

Gibt freie Threading an. Free Threading entspricht einem Multithread-Apartmentmodell. Eine Beschreibung der für ein ATL-Objekt verfügbaren Threadingmodelle finden Sie unter Angeben des Threadingmodells für andere Threadingoptionen und Optionen, den ATL-Assistenten für einfache Objekte.

_ATL_MODULES

Ermöglicht ihnen, ATL-Projekte mit permissive- C++-Modulen zu kompilieren und zu verwenden.

_ATL_MODULES

_ATL_MULTI_THREADED

Ein Symbol, das angibt, dass das Projekt Objekte enthält, die als "Beide", "Frei" oder "Neutral" gekennzeichnet sind.

_ATL_MULTI_THREADED

Hinweise

Wenn dieses Symbol definiert ist, ruft ATL Code ab, der den Zugriff auf globale Daten ordnungsgemäß synchronisiert. Neuer Code sollte stattdessen das entsprechende Makro _ATL_FREE_THREADED verwenden.

_ATL_NO_AUTOMATIC_NAMESPACE

Ein Symbol, das die Standardmäßige Verwendung von Namespace als ATL verhindert.

_ATL_NO_AUTOMATIC_NAMESPACE

Hinweise

Wenn dieses Symbol nicht definiert ist, einschließlich atlbase.h der standardmäßigen Ausführung using namespace ATL , was zu Benennungskonflikten führen kann. Um dies zu verhindern, definieren Sie dieses Symbol.

_ATL_NO_COM_SUPPORT

Ein Symbol, das verhindert, dass COM-bezogener Code mit Ihrem Projekt kompiliert wird.

_ATL_NO_COM_SUPPORT

ATL_NO_VTABLE

Ein Symbol, das verhindert, dass der vtable-Zeiger im Konstruktor und Destruktor der Klasse initialisiert wird.

ATL_NO_VTABLE

Hinweise

Wenn der vtable-Zeiger daran gehindert wird, im Konstruktor und Destruktor der Klasse initialisiert zu werden, kann der Linker die vtable und alle Funktionen beseitigen, auf die sie verweist. Erweitert bis __declspec(novtable).

Beispiel

class ATL_NO_VTABLE CMyClass2 :

ATL_NOINLINE

Ein Symbol, das angibt, dass eine Funktion nicht inlineiert werden soll.

    ATL_NOINLINE inline
    myfunction()
    {
    ...
    }

Parameter

myfunction
Die Funktion, die nicht inlineiert werden soll.

Hinweise

Verwenden Sie dieses Symbol, wenn Sie sicherstellen möchten, dass eine Funktion nicht vom Compiler inline eingelinet wird, obwohl sie als Inline deklariert werden muss, damit sie in einer Headerdatei platziert werden kann. Erweitert bis __declspec(noinline).

_ATL_SINGLE_THREADED

Definieren, ob alle Objekte das Einzelthreadingmodell verwenden

_ATL_SINGLE_THREADED

Hinweise

Gibt an, dass das Objekt immer im primären COM-Thread ausgeführt wird. Eine Beschreibung der für ein ATL-Objekt verfügbaren Threadingmodelle finden Sie unter Angeben des Threadingmodells für andere Threadingoptionen und Optionen, den ATL-Assistenten für einfache Objekte.

Siehe auch

Makros