共用方式為


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

請勿使用這些巨集。