Использование DLR из неуправляемого кода

Можно ли вызвать управляемый код, в частности IronRuby или IronPython, из неуправляемого кода, такого как C++ или Delphi?

Например, у нас есть приложение, написанное на Delphi, которое переносится на C#.NET. Мы хотели бы предоставить сценарии Ruby или Python в нашем новом приложении вместо VBSCRIPT. Однако нам нужно было бы предоставить сценарии Ruby/Python в старом приложении Delphi. Можно ли использовать управляемые библиотеки, предоставляемые IronRuby/IronPython из кода Delphi?

6 ответов

Решение

Да. Пример Delphi для Win32 здесь: http://interop.managed-vcl.com/
Показывает, как использовать C#, а также сборку Delphi.NET из Delphi для Win32.

Можно разместить CLR или DLR в неуправляемом коде, поскольку это COM-компонент. С этого момента вы можете загружать управляемые сборки, с которыми вам нужно взаимодействовать.

Из MSDN: хостинг общеязыковой среды выполнения

Почему бы не встроить CPython, который имеет API, предназначенный для использования непосредственно из C/C++. Вы теряете преимущество в нескольких языках, но, вероятно, получаете простоту.

Я использую Unmanaged Exports для создания интерфейса к движку сценариев IronPython в C#. Будьте осторожны при использовании.NET-кода из Win32 Delphi - вы должны использовать Set8087CW($133F); изменить поведение исключения с плавающей запятой.

Да. Это возможно с помощью Com Callable Wrappers. По сути, вы позволяете своим классам.Net вызываться через COM/ActiveX из кода win32 (Delphi или C++).

Вы видели Гидру из RemObjects? У меня нет опыта с этим, но из вступления это выглядит актуально.

Другие вопросы по тегам