C++/WinRT 組態巨集
本主題描述C++/WinRT 組態巨集。 除非另有說明,否則這些規則會套用至所有C++/WinRT 組態巨集:
- 所有連結在一起以形成單一模組的檔案(
.exe
或.dll
)都必須具有相同的巨集設定。 這包括靜態庫。 - 所有宏設定必須完成後,才可以包含任何 C++/WinRT 頭檔。
- 在包含任何 C++/WinRT 標頭檔案之後,您不得變更任何巨集設定。
WINRT_LEAN_AND_MEAN
如果已定義,請停用這些很少使用的功能(以減少編譯時間):
- 在元件外部實現獨佔介面的能力。
- std::hash 介面和執行期類別智慧型指標的特殊化。
- 支援將 hstring 或 IStringable 直接輸出至 C++ 資料流,因為版本為 2.0.221101.3。
您可以將具有不同設定的檔案合併到 WINRT_LEAN_AND_MEAN中。
未定義 WINRT_LEAN_AND_MEAN 的檔案可存取很少使用的功能。
WINRT_NO_MODULE_LOCK
如果已定義,則會停用目前模組的物件計數。 模組永遠不會從程序卸載。 定義此巨集是用於可執行檔的慣例(這些檔案無法卸載),或者用於您希望保持釘選狀態的 .dll
。 可能不會與 WINRT_CUSTOM_MODULE_LOCK合併。
WINRT_自訂模組鎖定
如果已定義,可讓您提供自己的 winrt::實作: get_module_lock。 不得與 WINRT_NO_MODULE_LOCK結合。
winrt::get_module_lock的自訂實作必須支持下列操作:
-
++winrt::get_module_lock()
:增加模組鎖的參考計數。 -
--winrt::get_module_lock()
:遞減模組鎖的參考計數。 -
if (winrt::get_module_lock())
:檢查參考計數是否為非零。 (如果您要建置 DLL,則需要)。
WINRT_ASSERT,WINRT_VERIFY
這些巨集可讓您自訂斷言處理。 WINRT_ASSERT 不需要評估自變數。 WINRT_VERIFY 要求評估自變數,即使在非偵錯組建中也是如此。
如果您未自訂這些巨集,且已定義 _DEBUG,則 C++/WinRT 會將它們視為等同於 _ASSERTE。
如果您未自定義這些巨集,且未定義 _DEBUG,則C++/WinRT 會定義 WINRT_ASSERT 來捨棄未評估的表達式,並定義 WINRT_VERIFY 在評估表達式之後捨棄表達式。
WINRT_NO_MAKE_DETECTION (不進行檢測)
如果已定義,請停用預設C++/WinRT 診斷,以偵測您錯誤地建構實作類別,而不使用 winrt::make。
強烈建議您不要定義此符號,因為這樣做會遮罩程式設計錯誤的常見來源。
WINRT_NO_SOURCE_LOCATION
如果已定義,則會停用在產生錯誤時包含來源檔案和行號資訊(在偵錯組建中也會停用包含函式資訊)。
C++/WinRT 不會使用此額外資訊,但可供其他想要與 C++/WinRT 例外狀況互通的連結庫使用,例如 Windows 實作連結庫。
根據預設,在 C++20 模式或更新版本中編譯時,會包含資訊。 您可能想要隱藏此資訊以減少二進位大小。
WINRT_DIAGNOSTICS
如果已定義,可讓內部統計資料追蹤各種作業:
- 查詢每個介面的次數。
- 要求每個工廠的次數(以及工廠是否具備敏捷性)。
WINRT_NATVIS
如果已定義,則包含協助函式,用於支援 Visual Studio 中的原生偵錯可視化。 程序代碼不會在運行時間使用;它只存在偵錯。
如果您未自定義此巨集,則在定義 _DEBUG 時,會啟用視覺化支援函式。 如需詳細資訊,請參閱 Visual Studio 用於 C++/WinRT 的原生偵錯視覺化(natvis)。
您可以針對 WINRT_NATVIS將檔案與不同的設定合併。
如果以 WINRT_NATVIS 支援編譯任何檔案,則產生的模組將會啟用原生偵錯視覺效果。
WINRT_EXPORT,WINRT_FAST_ABI_SIZE
請勿使用這些巨集。