Макросы конфигурации 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_CUSTOM_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_DIAGNOSTICS
Если определен, включает внутреннюю статистику для отслеживания различных операций:
- Количество запросов к каждому интерфейсу.
- Количество запрошенных фабрик (а также гибкость фабрики).
WINRT_NATVIS
Если определен, содержит вспомогательные функции для собственных визуализаций отладки в Visual Studio. Код не используется в среде выполнения; он предназначен только для отладки.
Если этот макрос не настроен, функции поддержки визуализации будут включены (если определен _DEBUG). Дополнительные сведения см. в статье о собственной визуализации отладки Visual Studio (natvis) для C++/WinRT.
Вы можете объединять файлы с разными параметрами для WINRT_NATVIS.
Если какой-либо файл компилируется с поддержкой WINRT_NATVIS, результирующий модуль будет включать собственные визуализации отладки.
WINRT_EXPORT, WINRT_FAST_ABI_SIZE
Не используйте эти макросы.