如何在 C++/CX 中内省(introspection)对象?我知道如何获取它的类名(使用 IInspectable),但是如果我只有方法的名称(字符串),我无法弄清楚如何获取它的属性列表或如何调用方法。我在这里和谷歌搜索了答案,但我发现与 WinRT 的 .NET 层有关(C++/CX 中似乎没有 System.Reflection 命名空间)。
最佳答案
正如 svick 所暗示的,您将类名(从 IInspectable::GetRuntimeClassName 检索)交给 RoGetMetaDataFile。这将返回 IMetaDataImport2 .现在调用IMetaDataImport2::FindTypeDefByName .这将返回一个 typedef 标记。现在调用IMetaDataImport2::GetTypeDefProps这将为您提供有关类型的属性。
从 typedef 属性中,您可以检索其他信息 - 如果它是接口(interface)/结构(或枚举),则枚举方法/字段,查找运行时类的类型(如果它是接口(interface)或类)等。
关于reflection - WinRT 反射 (C++/CX),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7553273/