Makra konfigurace C++/WinRT

Toto téma popisuje konfigurační makra C++/WinRT. Pokud není uvedeno jinak, platí tato pravidla pro všechna konfigurační makra C++/WinRT:

  • Všechny soubory, které jsou propojeny do jednoho modulu (.exe nebo .dll), musí mít identické nastavení maker. To zahrnuje statické knihovny.
  • Před zahrnutím jakéhokoliv souboru hlaviček C++/WinRT musí být všechna nastavení maker dokončena.
  • Po zahrnutí jakéhokoli souboru hlaviček C++/WinRT nesmíte změnit žádné nastavení makra.

WINRT_LEAN_AND_MEAN

Pokud je definováno, zakáže tyto zřídka používané funkce (aby se zkrátila doba kompilace):

  • Možnost implementovat exkluzivní rozhraní mimo komponentu.
  • std::hash – specializace pro inteligentní ukazatele třídy rozhraní a modulu runtime
  • Podpora přímého výstupu hstringu nebo IStringable do datového proudu C++ od verze 2.0.221101.3.

Soubory můžete kombinovat s různými nastaveními pro WINRT_LEAN_AND_MEAN.

Soubory, které nedefinují WINRT_LEAN_AND_MEAN, získají přístup k zřídka používaným funkcím.

WINRT_NO_MODULE_LOCK

Pokud je definováno, zakáže počet objektů pro aktuální modul. Modul se z procesu nikdy neuvolní. Definování tohoto makra je obvyklé u spustitelných souborů (které se nikdy nemohou uvolnit z paměti) nebo u .dll, které zamýšlíte ponechat připnuté. Nelze kombinovat s WINRT_CUSTOM_MODULE_LOCK.

WINRT_CUSTOM_MODULE_LOCK

Pokud je definováno, můžete zadat vlastní implementaci winrt::get_module_lock. Nelze kombinovat s WINRT_NO_MODULE_LOCK.

Vaše vlastní implementace winrt::get_module_lock musí podporovat následující operace:

  • ++winrt::get_module_lock(): Zvyšte počet referencí u zámku modulu.
  • --winrt::get_module_lock(): Snižte počet referencí zámku modulu.
  • if (winrt::get_module_lock()): Zkontrolujte, jestli je počet odkazů nenulová. (Potřebné, pokud vytváříte knihovnu DLL.)

WINRT_ASSERT, WINRT_VERIFY

Tato makra umožňují přizpůsobit zpracování asercí. WINRT_ASSERT nevyžaduje vyhodnocení argumentu. WINRT_VERIFY vyžaduje, aby byl argument vyhodnocen, a to i v sestaveních bez ladění.

Pokud tato makra nepřizpůsobíte a _DEBUG je definovaná, C++/WinRT je vytvoří ekvivalentem _ASSERTE.

Pokud tato makra nepřizpůsobíte a _DEBUG není definována, pak C++/WinRT definuje WINRT_ASSERT tak, aby zahodilo výraz, aniž by jej vyhodnotilo, a definuje WINRT_VERIFY tak, aby výraz po jeho vyhodnocení zahodilo.

WINRT_NO_MAKE_DETECTION

Pokud je definováno, zakáže výchozí diagnostiku C++/WinRT, která zjistí, že jste omylem vytvořili třídu implementace bez použití winrt::make.

Důrazně doporučujeme, abyste tento symbol nedefinujte, protože tím se maskuje běžný zdroj programovacích chyb.

WINRT_NO_SOURCE_LOCATION

Pokud je definováno, zakáže zahrnutí informací o zdrojovém souboru a čísle řádku (a v ladicích sestaveních také informací o funkcích) při vytváření chyb.

Tyto další informace nejsou používány C++/WinRT, ale jsou k dispozici pro jiné knihovny, které chtějí spolupracovat s výjimkami C++/WinRT, jako je například knihovna implementace Windows.

Ve výchozím nastavení jsou informace zahrnuty při kompilaci v režimu C++20 nebo vyšší. Tyto informace můžete potlačit, aby se zmenšila binární velikost.

WINRT_DIAGNOSTICS

Pokud je definováno, umožňuje interní statistiky sledovat různé operace:

  • Kolikrát bylo každé rozhraní dotazováno.
  • Kolikrát byla každá továrna požadována (a jestli je továrna agilní).

WINRT_NATVIS

Pokud je definováno, obsahuje pomocné funkce, které vám pomůžou v nativních vizualizacích ladění v Visual Studio. Kód se nepoužívá za běhu; existuje pouze pro ladění.

Pokud toto makro nepřizpůsobíte, jsou funkce podpory vizualizace povoleny, pokud je definována _DEBUG . Další podrobnosti najdete v článku Visual Studio native debug visualization (natvis) for C++/WinRT.

Můžete kombinovat soubory s různými nastaveními pro WINRT_NATVIS.

Pokud je některý soubor zkompilován s podporou WINRT_NATVIS, bude mít výsledný modul povolené nativní vizualizace pro ladění.

WINRT_EXPORT, WINRT_FAST_ABI_SIZE

Tato makra nepoužívejte.