Макросы конфигурации 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_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

Если определено, отключает диагностику C++/WinRT по умолчанию, которая обнаруживает, что класс реализации неправильно создан без использования winrt::make.

Настоятельно рекомендуется не определять этот символ, так как при этом маскирует распространенный источник ошибок программирования.

WINRT_NO_SOURCE_LOCATION

Если задан, отключает включение имени исходного файла и информации о номере строки (а в отладочных сборках — также информации о функции) при формировании сообщений об ошибках.

Эта дополнительная информация не используется C++/WinRT, но она доступна другим библиотекам, которые хотят взаимодействовать с исключениями C++/WinRT, такими как библиотека реализации Windows.

По умолчанию сведения включаются при компиляции в режиме C++20 или более поздней версии. Вы можете отключить эту информацию, чтобы уменьшить двоичный размер.

WINRT_DIAGNOSTICS

Если определено, позволяет внутренней статистике отслеживать различные операции:

  • Количество запросов к каждому интерфейсу.
  • Сколько раз запрашивалась каждая фабрика (и является ли она agile).

WINRT_NATVIS

При определении включает вспомогательные функции для поддержки собственных визуализаций отладки в Visual Studio. Код не используется во время выполнения; он существует только для отладки.

Если этот макрос не переопределён, то функции поддержки визуализации включаются, если определён _DEBUG. Дополнительные сведения см. в статье Собственная визуализация отладки (natvis) в Visual Studio для C++/WinRT.

Вы можете объединить файлы с различными параметрами для WINRT_NATVIS.

Если любой файл компилируется с поддержкой WINRT_NATVIS , результирующий модуль будет включать собственные визуализации отладки.

WINRT_EXPORT, WINRT_FAST_ABI_SIZE

Не используйте эти макросы.