C++/WinRT 設定巨集

本主題描述 C++/WinRT 設定巨集。 除非另有說明,否則這些規則會套用至所有 C++/WinRT 設定巨集:

  • 所有連結在一起以形成單一模組的檔案(.exe.dll) 都必須具有相同的巨集設定。 這包括靜態程式庫。
  • 在包含任何 C++/WinRT 標頭檔案之前,必須完成所有巨集設定。
  • 在包含任何 C++/WinRT 標頭檔之後,您將不能變更任何巨集設定。

WINRT_LEAN_AND_MEAN

如果已定義,請停用這些很少使用的功能 (以減少編譯時間):

  • 在元件外部實作獨佔介面的能力。
  • 介面和執行時間類別智慧型指標的 std::hash 特殊化。
  • 自版本 2.0.221101.3 開始,支援將 hstring 或 IStringable 直接輸出至 C++ 資料流。

您可以將 WINRT_LEAN_AND_MEAN 的檔案與不同的設定合併。

未定義 WINRT_LEAN_AND_MEAN 的檔案可存取很少使用的功能。

WINRT_NO_MODULE_LOCK

如果已定義,則會停用目前模組的物件計數。 模組永遠不會從進程卸載。 針對可執行檔 (永遠無法卸載) 或您想要保留釘選的 .dll,慣例會定義此巨集。 不能與 WINRT_CUSTOM_MODULE_LOCK 合併。

WINRT_CUSTOM_MODULE_LOCK

如果已定義,可讓您提供自己的 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

如果已定義,請停用偵測到您錯誤地建構實作類別,而未使用 winrt::make 的預設 C++/WinRT 診斷。

強烈建議您不要定義此符號,因為這樣做會遮蓋程式設計錯誤的常見來源。

WINRT_DIAGNOSTICS

如果已定義,可讓內部統計資料追蹤各種作業:

  • 查詢每個介面的次數。
  • 要求每個處理站的次數 (以及處理站是否敏捷)。

WINRT_NATVIS

如果已定義,則包含協助函式,以協助 Visual Studio 中的原生偵錯視覺效果。 程式碼不會在執行時間使用;它只會用於偵錯。

如果您未自訂此巨集,則會在定義 _DEBUG 時啟用視覺效果支援函式。 如需詳細資訊,請參閱 C++/WinRT 的 Visual Studio 原生偵錯視覺效果 (原生)

您可以將檔案與不同的 WINRT_LEAN_AND_MEAN 設定合併。

如果以 WINRT_NATVIS 支援編譯任何檔案,則產生的模組將會啟用原生偵錯視覺效果。

WINRT_EXPORT, WINRT_FAST_ABI_SIZE

請勿使用這些巨集。