Какие механизмы отражения доступны в C ++ / WinRT? - PullRequest
0 голосов
/ 26 декабря 2018

Я помню, что в C ++ была добавлена ​​некоторая информация о типах времени выполнения (RTTI) после оригинальной версии Bjarne Stroustrup Язык программирования C ++ , но у меня никогда не было необходимости использовать ее.

Я знаком с некоторыми API-интерфейсами отражения COM и CLR, включая ITypeInfo и System.Reflection.Будет ли что-нибудь из этого работать против типов, объявленных в скомпилированном приложении C ++ / WinRT?

Этот вопрос посвящен аналогичному вопросу 5 лет назад для C ++ / CX, были ли изменения?

1 Ответ

0 голосов
/ 26 декабря 2018

C ++ / WinRT не добавляет собственных возможностей отражения C ++.Однако API-интерфейсы чтения метаданных xlang можно использовать для проверки файлов метаданных среды выполнения Windows (.winmd), которые описывают типы WinRT.Вы можете увидеть библиотеку чтения метаданных здесь (и есть примеры использования в различных инструментах в этом репо):

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 в настоящее время не обеспечивает никакой поддержки для динамического вызова типов.Это нечастый, но повторяющийся запрос, и он находится в нашем отставании.

Спасибо,

Бен

...