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 mit einem einzigen Modul (.exe oder .dll) verknüpft sind, müssen identische Makroeinstellungen aufweisen. Dazu gehören statische Bibliotheken.
  • Alle Makroeinstellungen müssen abgeschlossen sein, bevor eine C++/WinRT-Headerdatei eingeschlossen wird.
  • Sie dürfen keine Makroeinstellung ändern, nachdem Sie eine C++/WinRT-Headerdatei eingeschlossen haben.

WINRT_LEAN_AND_MEAN

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

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

Sie dürfen Dateien mit verschiedenen Einstellungen für WINRT_LEAN_AND_MEAN kombinieren.

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

WINRT_NO_MODULE_LOCK

Wenn definiert, werden die Objektanzahlen für das aktuelle Modul deaktiviert. Das Modul wird nie aus dem Prozess entladen. Die Definition dieses Makros ist bei ausführbaren Dateien (die nie entladen werden können) oder bei .dll, die Sie dauerhaft geladen lassen möchten, üblich. Kann nicht mit WINRT_CUSTOM_MODULE_LOCK kombiniert werden.

WINRT_CUSTOM_MODULE_LOCK

Falls 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 Sie den Referenzzähler der Modulsperre.
  • --winrt::get_module_lock(): Verringern Sie die Referenzanzahl der Modulsperre.
  • if (winrt::get_module_lock()): Überprüfen Sie, ob die Referenzanzahl ungleich Null ist. (Erforderlich, wenn Sie eine DLL erstellen.)

WINRT_ASSERT, WINRT_VERIFY

Mit diesen Makros können Sie die Assertionsbehandlung anpassen. WINRT_ASSERT erfordert keine Auswertung des Arguments. WINRT_VERIFY erfordert, dass das Argument ausgewertet wird, auch in Nicht-Debug-Builds.

Wenn Sie diese Makros nicht anpassen und _DEBUG definiert ist, ergibt C++/WinRT sie entsprechend _ASSERTE.

Wenn Sie diese Makros nicht anpassen und _DEBUG nicht definiert ist, definiert C++/WinRT WINRT_ASSERT , um den Ausdruck nicht ausgewertet zu verwerfen, und definiert WINRT_VERIFY , um den Ausdruck nach der Auswertung zu verwerfen.

WINRT_NO_MAKE_DETECTION

Wenn definiert, wird die standardmäßige C++/WinRT-Diagnose deaktiviert, die erkennt, dass Sie versehentlich eine Implementierungsklasse ohne winrt::make erstellt haben.

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

WINRT_NO_SOURCE_LOCATION

Falls definiert, deaktiviert dies beim Erzeugen von Fehlern die Einbeziehung von Informationen zur Quelldatei und Zeilennummer (und in Debug-Builds von Funktionsangaben).

Diese zusätzlichen Informationen werden nicht von C++/WinRT verwendet, sondern für andere Bibliotheken verfügbar gemacht, die mit C++/WinRT-Ausnahmen zusammenarbeiten möchten, z. B. der Windows Implementierungsbibliothek.

Standardmäßig werden die Informationen beim Kompilieren im C++20-Modus oder höher eingeschlossen. Sie können diese Informationen unterdrücken, um die Binäre Größe zu reduzieren.

WINRT_DIAGNOSTICS

Wenn definiert, können interne Statistiken verschiedene Vorgänge nachverfolgen:

  • Die Häufigkeit, mit der jede Schnittstelle abgefragt wurde.
  • Wie oft jede Fabrik angefordert wurde (und ob die Fabrik agil ist).

WINRT_NATVIS

Wenn definiert, enthält Hilfsfunktionen zur Unterstützung nativer Debugvisualisierungen in Visual Studio. Der Code wird zur Laufzeit nicht verwendet. es ist nur für das Debuggen vorhanden.

Wenn Sie dieses Makro nicht anpassen, werden visualisierungsunterstützungsfunktionen aktiviert, wenn _DEBUG definiert ist. Weitere Informationen finden Sie unter Visual Studio native Debugvisualisierung (natvis) für C++/WinRT.

Sie dürfen Dateien mit unterschiedlichen Einstellungen für WINRT_NATVIS kombinieren.

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

WINRT_EXPORT, WINRT_FAST_ABI_SIZE

Verwenden Sie diese Makros nicht.