Share via


C++/WinRT-Konfigurationsmakros

In diesem Thema werden die C++/WinRT-Konfigurationsmakros beschrieben. Sofern nicht anders angegeben, gelten diese Regeln für alle C++/WinRT-Konfigurationsmakros:

  • Alle Dateien, die miteinander zu einem einzigen Modul verknüpft sind (.exe oder .dll), müssen identische Makroeinstellungen haben. Dies schließt statische Bibliotheken ein.
  • Alle Makroeinstellungen müssen abgeschlossen sein, bevor eine C++/WinRT-Headerdatei hinzugefügt wird.
  • Nach dem Hinzufügen einer C++/WinRT-Headerdatei können keine Makroeinstellung mehr geändert werden.

WINRT_LEAN_AND_MEAN

Wenn definiert, werden diese selten verwendeten Features deaktiviert (um die Kompilierzeiten zu reduzieren):

  • Die Möglichkeit, exklusive Schnittstellen außerhalb der Komponente zu implementieren.
  • std::hash-Spezialisierungen für intelligente Schnittstellen- und Laufzeitklassen-Zeiger.
  • Unterstützung für die direkte Ausgabe eines hstring- oder IStringable-Elements in einen C++-Stream seit Version 2.0.221101.3.

Sie können Dateien mit unterschiedlichen Einstellungen für WINRT_LEAN_AND_MEAN kombinieren.

Dateien, die WINRT_LEAN_AND_MEAN nicht definieren, erhalten Zugriff auf die selten verwendeten Features.

WINRT_NO_MODULE_LOCK

Wenn definiert, wird die Objektanzahl für das aktuelle Modul deaktiviert. Das Modul wird nie aus dem Prozess entladen. Das Definieren dieses Makros wird üblicherweise für ausführbare Dateien verwendet (die nie entladen werden können) oder für .dll-Elemente, die angeheftet bleiben sollen. Kann nicht mit WINRT_CUSTOM_MODULE_LOCK kombiniert werden.

WINRT_CUSTOM_MODULE_LOCK

Wenn definiert, können Sie ihre eigene Implementierung von winrt::get_module_lock bereitstellen. Kann nicht mit WINRT_NO_MODULE_LOCK kombiniert werden.

Ihre benutzerdefinierte Implementierung von winrt::get_module_lock muss die folgenden Vorgänge unterstützen:

  • ++winrt::get_module_lock(): Erhöhen der Verweisanzahl auf der Modulsperre
  • --winrt::get_module_lock(): Verringern der Verweisanzahl auf der Modulsperre
  • if (winrt::get_module_lock()): Überprüfen, ob die Referenzanzahl ungleich Null ist (Erforderlich, wenn Sie eine DLL erstellen.)

WINRT_ASSERT, WINRT_VERIFY

Mit diesen Makros können Sie die Assertionsverarbeitung anpassen. Für WINRT_ASSERT muss das Argument nicht ausgewertet werden. WINRT_VERIFY erfordert, dass das Argument ausgewertet wird, auch in Non-Debug-Builds.

Wenn Sie diese Makros nicht anpassen und _DEBUG definiert ist, sind sie in C++/WinRT gleichbedeutend mit _ASSERTE.

Wenn Sie diese Makros nicht anpassen und _DEBUG nicht definiert ist, wird WINRT_ASSERT von C++/WinRT so definiert, dass der nicht ausgewertete Ausdruck verworfen wird, und WINRT_VERIFY wird so definiert, dass der Ausdruck nach der Auswertung verworfen wird.

WINRT_NO_MAKE_DETECTION

Wenn definiert, wird die C++/WinRT-Standarddiagnose deaktiviert, die erkennt, dass Sie fälschlicherweise eine Implementierungsklasse ohne Verwendung von winrt::make erstellt haben.

Es wird dringend empfohlen, dieses Symbol nicht zu definieren, weil dadurch eine häufige Quelle von Programmierfehlern maskiert wird.

WINRT_DIAGNOSTICS

Wenn definiert, ermöglicht es internen Statistiken das Nachverfolgen verschiedener Vorgänge:

  • Gibt an, wie oft jede Schnittstelle abgefragt wurde.
  • Gibt an, wie oft jede Factory angefordert wurde (und ob die Factory agil ist).

WINRT_NATVIS

Wenn definiert, werden Hilfsfunktionen zur Unterstützung nativer Debugvisualisierungen in Visual Studio hinzugefügt. Der Code wird zur Laufzeit nicht verwendet. Er existiert nur zum Debuggen.

Passen Sie dieses Makro nicht an, werden Funktionen zur Visualisierungsunterstützung aktiviert, wenn _DEBUG definiert ist. Weitere Informationen finden Sie unter Visual Studio Native Debugvisualisierung (natvis) für C++/WinRT.

Sie können Dateien mit unterschiedlichen Einstellungen für WINRT_NATVIS kombinieren.

Wenn eine Datei mit Unterstützung für WINRT_NATVIS kompiliert wird, sind für das resultierende Modul native Debugvisualisierungen aktiviert.

WINRT_EXPORT, WINRT_FAST_ABI_SIZE

Verwenden Sie diese Makros nicht.