Динамический объект C #, используемый в C ++ / CLI - PullRequest
3 голосов
/ 15 февраля 2012

В настоящее время я создаю библиотеку взаимодействия c ++ / cli.Библиотека будет использоваться приложениями c # и vb.net, и я хотел бы использовать динамическую типизацию .Net 4.У меня есть модуль конфигурации, который использует динамический доступ к элементу для обращения к ключам конфигурации, это прекрасно работает в c #, но вызывает проблемы в c ++ / cli (не совсем неожиданно). Есть ли способ использовать эту библиотеку в C ++ / CLI (например,Вызов TryGetMember () напрямую или что-то)?Если библиотека C ++ / CLI затем передает динамическую конфигурацию производному классу, написанному на C #, сможет ли C # по-прежнему использовать динамический доступ к элементу?Обратите внимание, что базовый класс определен в c ++ / cli, поэтому я не смогу использовать ключевое слово dynamic.(или я бы?)

Ответы [ 2 ]

2 голосов
/ 17 февраля 2012

Существует библиотека с открытым исходным кодом, ImpromptuInterface (найденная с помощью nuget), которая упрощает API, используемые компилятором c #, когда используется ключевое слово dynamic, я предполагаю, что это работает в c ++ / cli, поскольку они являются просто статическими функциями c #,Я знаю, что это работает в F #, который также не имеет поддержки DLR.

Вот список динамического вызова, который он может сделать.

1 голос
/ 15 февраля 2012

Динамические типы C # / VB переводятся компилятором в обычные типы и вызовы методов. Генерируемый IL несколько сложен, но никак не особенный. Вы определенно можете написать код C ++ / CLI, который генерирует похожий IL.

Возможно, самый простой способ написать код на C ++ / CLI - написать код, использующий динамические типы в C #, а затем использовать Reflector для декомпиляции сборки в C ++ / CLI.

...