C ++ / WinRT提供哪些反射机制?

时间:2018-12-26 00:13:11

标签: reflection c++-winrt

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

我熟悉一些COM和CLR反射API,包括ITypeInfo和System.Reflection。这些工具中的任何一种都可以针对已编译的C ++ / WinRT应用程序中声明的类型吗?

here在5年前针对C ++ / CX提出了类似的问题,是否有所变化?

1 个答案:

答案 0 :(得分:3)

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

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目前不提供对类型的动态调用的任何支持。这是一个很少见但经常出现的问题,并且在我们的积压中。

谢谢