C++/WinRT 構成マクロ

このトピックでは、C++/WinRT 構成マクロについて説明します。 特に明記されていない限り、これらの規則は、すべての C++/WinRT 構成マクロに適用されます。

  • 1 つのモジュール (.exe または .dll) を形成するためにリンクされているすべてのファイルには、同じマクロ設定が必要です。 これには静的ライブラリが含まれます。
  • すべてのマクロ設定は、C++/WinRT ヘッダー ファイルを含む前に完了している必要があります。
  • C++/WinRT ヘッダー ファイルを含めた後にマクロ設定を変更することはできません。

WINRT_LEAN_AND_MEAN

定義されている場合は、これらの使用頻度の低い機能を無効にします (コンパイル時間を短縮するため)。

  • コンポーネントの外部で排他的インターフェイスを実装する機能。
  • インターフェイスとランタイム クラスのスマート ポインターの std::hash 特殊化。
  • バージョン 2.0.221101.3 以降の C++ ストリームに hstring または IStringable を直接出力するためのサポート。

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()): 参照カウントが 0 以外かどうかを確認します。 (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_NO_SOURCE_LOCATION

定義されている場合、エラーの発生時にソース ファイルと行番号の情報 (およびデバッグ ビルド、関数情報) を含めるのを無効にします。

この追加情報は C++/WinRT では使用されませんが、Windows実装ライブラリなど、C++/WinRT 例外と相互運用する他のライブラリで使用できます。

既定では、情報は C++20 モード以上でコンパイルされるときに含まれます。 バイナリ サイズを小さくするために、この情報を非表示にすることもできます。

WINRT_DIAGNOSTICS

定義されている場合は、内部統計でさまざまな操作を追跡できます。

  • 各インターフェイスが照会された回数。
  • 各ファクトリがリクエストされた回数(およびそのファクトリがアジャイルかどうか)。

WINRT_NATVIS

定義されている場合は、Visual Studioのネイティブ デバッグの視覚化を支援するヘルパー関数が含まれます。 コードは実行時には使用されません。デバッグ用にのみ存在します。

このマクロをカスタマイズしない場合は、 _DEBUG が定義されている場合、視覚化サポート関数が有効になります。 詳細については、C++/WinRT Visual Studioネイティブ デバッグ視覚化 (natvis) に関するページを参照してください。

WINRT_NATVISの設定が異なるファイルを組み合わせることができます。

いずれかのファイルが WINRT_NATVIS サポートを使用してコンパイルされた場合、結果のモジュールではネイティブ デバッグの視覚化が有効になります。

WINRT_EXPORT、WINRT_FAST_ABI_SIZE

これらのマクロは使用しないでください。