2012-02-14 3 views
3

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

ответ

2

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

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

+0

Это выглядит многообещающим, спасибо за лидерство. Я собираюсь взглянуть на интеграцию этого позже сегодня –

1

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

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

+1

Пожалуйста, не используйте фразу «управляемый C++», если вы на самом деле не говорите об .NET 1.x. Текущей технологией является C++/CLI. –

+0

Спасибо за исправление - я не знал об этом. Я отредактировал свой ответ. –

+0

Это кажется немного мрачным для моих целей, также у меня нет рефлектора –