【问题标题】:What reflection mechanisms are available in C++/WinRT?C++/WinRT 中有哪些反射机制?
【发布时间】:2018-12-27 01:59:00
【问题描述】:

我记得 C++ 在 Bjarne Stroustrup 最初的C++ 编程语言之后的某个时间添加了一些运行时类型信息 (RTTI),但我从来没有使用过它。

我熟悉一些 COM 和 CLR 反射 API,包括 ITypeInfo 和 System.Reflection。这些是否适用于编译的 C++/WinRT 应用程序中声明的类型?

This question 在 5 年前针对 C++/CX 解决了类似的问题,是否有变化?

【问题讨论】:

  • 没有评论解释这与编程无关的近距离投票是怎么回事?

标签: reflection c++-winrt


【解决方案1】:

C++ /WinRT 不会添加到 C++ 的本机反射功能。但是,xlang 元数据读取器 API 可用于检查描述 WinRT 类型的 Windows 运行时元数据文件 (.winmd)。您可以在此处查看元数据阅读器库(此 repo 中的各种工具中都有使用示例):

https://github.com/Microsoft/xlang/blob/master/src/library/meta_reader.h

您可以将它与 Windows 函数 RoGetMetadataFile 结合使用,以在运行时定位类型的元数据。

https://docs.microsoft.com/en-us/windows/desktop/api/rometadataresolution/nf-rometadataresolution-rogetmetadatafile

请注意,C++ /WinRT 本身在运行时不使用 winmd 文件,因此,使用 C++ /WinRT 构建的代码不需要 winmd 在运行时可用。如果 winmd 不存在,您将无法依赖它来获取类型信息。

如果为使用 C++ /WinRT 编写的类型提供元数据文件,则 .NET 运行时可以使用 winmd 反映投影类型,其方式与反映使用 .NET 运行时编写的类型大致相同。

C++ /WinRT 目前不为类型的动态调用提供任何支持。这是一个不常见但反复出现的问题,并且在我们的积压工作中。

谢谢,

【讨论】:

  • 查看由 C++/WinRT VSIX(版本 2.0.190417.3)生成的头文件,我发现了命名空间 winrt::experimental::reflect。最近有没有变化,目前的状况和长期目标是什么?
  • @IInspectable 您可能会注意到,自 PR330 起,实验性反射支持不再存在。
猜你喜欢
  • 2011-11-25
  • 2023-04-09
  • 2011-03-20
  • 2011-06-07
  • 1970-01-01
  • 2012-04-23
  • 2012-09-08
  • 1970-01-01
  • 2014-11-12
相关资源
最近更新 更多