如何在C++/CX中反射一个对象?我知道可以使用IInspectable获取其类名,但我不知道如何获取其属性列表或者只有方法名(字符串)时如何调用方法。我在这里和谷歌上搜索了答案,但找到的都是关于WinRT的.NET层的内容(System.Reflection命名空间似乎在C++/CX中不可用)。
如何在C++/CX中反射一个对象?我知道可以使用IInspectable获取其类名,但我不知道如何获取其属性列表或者只有方法名(字符串)时如何调用方法。我在这里和谷歌上搜索了答案,但找到的都是关于WinRT的.NET层的内容(System.Reflection命名空间似乎在C++/CX中不可用)。
FindTypeDefByName
,而是直接使用通过其最后一个输出参数返回的RoGetMetaDataFile
的mdTypeDef
吗? - James McNellisC++没有提供任何特定的API来反射WinRT类型,这些类型完全在符合CX的元数据文件中定义,您可以使用CLR本机元数据API来读取它们的定义。代码片段如下:
去年James McNellis发布了一个完整的C++库,用于CX反射。http://seaplusplus.com/2012/04/26/cxxreflect-native-reflection-for-the-windows-runtime/
即使在WinRT应用程序中,大部分常规的.Net反射功能都不包含在可用的.Net子集中。我在WinRT文档中也没有找到任何与反射相关的类型。这意味着(除非我漏看了什么),可用的API并没有提供反射功能。
虽然我不明白为什么它不能使用。元数据是存在的,这应该足够了。
当查看特定于C++的函数时,有一个名为RoGetMetaDataFile()
的函数。它似乎可以用来获取元数据。但这是一个本地C++函数,而不是C++/CX。这意味着使用它并不容易(需要手动内存管理等),而且我怀疑它是否允许在商店中的应用程序中使用。