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_DIAGNOSTICS

如果已定义,则启用内部统计信息以跟踪各种操作:

  • 每个接口的查询次数。
  • 每个工厂被请求的次数(以及工厂是否敏捷)。

WINRT_NATVIS

如果已定义,则包括帮助程序函数,以帮助在 Visual Studio 中实现本机调试可视化。 在运行时不会使用该代码;它仅用于调试。

如果不自定义此宏,则在定义 _DEBUG 时启用可视化支持功能。 有关更多详细信息,请参阅适用于 C++/WinRT 的 Visual Studio 本机调试可视化 (natvis)

你可以将文件与 WINRT_NATVIS 的不同设置组合。

如果使用 WINRT_NATVIS 支持编译任何文件,则生成的模块将启用本机调试可视化效果。

WINRT_EXPORT、WINRT_FAST_ABI_SIZE

请勿使用这些宏。