C++/WinRT-konfigurationsmakron
I det här avsnittet beskrivs C++/WinRT-konfigurationsmakronen. Om inget annat anges gäller dessa regler för alla C++/WinRT-konfigurationsmakron:
- Alla filer som är länkade tillsammans för att bilda en enskild modul (
.exe
eller.dll
) måste ha identiska makroinställningar. Det inkluderar statiska bibliotek. - Alla makroinställningar måste vara slutförda innan du inkluderar en C++/WinRT-huvudfil.
- Du får inte ändra någon makroinställning efter att du har inkluderat någon C++/WinRT-rubrikfil.
WINRT_LEAN_AND_MEAN
Om det definieras inaktiveras dessa sällan använda funktioner (för att minska kompileringstiderna):
- Möjligheten att implementera exklusiva gränssnitt utanför komponenten.
- std::hash-specialiseringar för gränssnitts- och körklassens smarta pekare.
- Stöd för att direkt mata ut en hstring eller IStringable till en C++-ström, från och med version 2.0.221101.3.
Du kan kombinera filer med olika inställningar för WINRT_LEAN_AND_MEAN.
Filer som inte definierar WINRT_LEAN_AND_MEAN få åtkomst till de sällan använda funktionerna.
WINRT_NO_MODULE_LOCK
Om det är definierat inaktiveras objekträknare för den aktuella modulen. Modulen lossas aldrig från processen. Att definiera det här makrot är vanligt för körbara filer (som aldrig kan avlastas) eller för .dll
som du tänker låsa. Får inte kombineras med WINRT_CUSTOM_MODULE_LOCK.
WINRT_CUSTOM_MODULE_LOCK
Om det definieras kan du ange din egen implementering av winrt::get_module_lock. Får inte kombineras med WINRT_NO_MODULE_LOCK.
Din anpassade implementering av winrt::get_module_lock måste ha stöd för följande åtgärder:
-
++winrt::get_module_lock()
: Öka referensantalet för modullåset. -
--winrt::get_module_lock()
: Minska referensantalet för modullåset. -
if (winrt::get_module_lock())
: Kontrollera om referensantalet inte är noll. (Behövs om du skapar en DLL.)
WINRT_ASSERT, WINRT_VERIFY
Med dessa makron kan du anpassa hantering av påståenden. WINRT_ASSERT kräver inte att argumentet utvärderas. WINRT_VERIFY kräver att argumentet utvärderas, även i icke-felsökningsversioner.
Om du inte anpassar dessa makron och _DEBUG har definierats, gör C++/WinRT dem likvärdiga med _ASSERTE.
Om du inte anpassar dessa makron och _DEBUG inte har definierats definierar C++/WinRT WINRT_ASSERT att ta bort uttrycket som inte är värderat och definierar WINRT_VERIFY för att ta bort uttrycket när du har utvärderat det.
WINRT_NO_MAKE_DETECTION
Om det definieras inaktiverar du C++/WinRT-standarddiagnostiken som identifierar att du av misstag har konstruerat en implementeringsklass utan att använda winrt::make.
Vi rekommenderar starkt att du inte definierar den här symbolen, eftersom det maskerar en vanlig källa till programmeringsfel.
WINRT_NO_SOURCE_LOCATION
Om det definieras inaktiveras inkluderingen av källfil- och radnummerinformation (och i felsökningsversioner, funktionsinformation) när det uppstår fel.
Den här ytterligare informationen används inte av C++/WinRT, men den görs tillgänglig för andra bibliotek som vill samverka med C++/WinRT-undantag, till exempel Windows-implementeringsbiblioteket.
Som standard inkluderas informationen när den kompileras i C++20-läge eller senare. Du kanske vill utelämna den här informationen för att minska binär storlek.
WINRT_DIAGNOSTICS
Om det definieras kan intern statistik spåra olika åtgärder:
- Antalet gånger som varje gränssnitt efterfrågades.
- Antalet gånger som varje fabrik efterfrågades (och om fabriken är flexibel).
WINRT_NATVIS
Om det definieras innehåller det hjälpfunktioner för att hjälpa till med interna felsökningsvisualiseringar i Visual Studio. Koden används inte vid körning. det finns bara för felsökning.
Om du inte anpassar makrot aktiveras funktioner för visualiseringsstöd om _DEBUG har definierats. Mer information finns i Visual Studio native debug visualization (natvis) for C++/WinRT.
Du kan kombinera filer med olika inställningar för WINRT_NATVIS.
Om någon fil kompileras med stöd för WINRT_NATVIS har den resulterande modulen inbyggda felsökningsvisualiseringar aktiverade.
WINRT_EXPORT, WINRT_FAST_ABI_SIZE
Använd inte dessa makron.