Utilisation de DLR à partir de code non géré
-
09-06-2019 - |
Question
Est-il possible d'appeler du code géré, en particulier IronRuby ou IronPython, à partir de code non personnalisé tel que C ++ ou Delphi?
Par exemple, nous avons une application écrite en Delphi qui est déplacée vers C # .NET. Nous souhaitons fournir des scripts Ruby ou Python dans notre nouvelle application pour remplacer VBSCRIPT. Cependant, nous aurions besoin de fournir des scripts Ruby / Python dans l'ancienne application Delphi. Est-il possible d'utiliser les dll gérées fournies par IronRuby / IronPython à partir de code Delphi?
La solution
Oui. Exemple Delphi pour Win32 ici: http://interop.managed-vcl.com/
Montre comment utiliser un assemblage C # et un assemblage Delphi.NET de Delphi pour Win32.
Autres conseils
Il est possible d’héberger le CLR ou le DLR en code non géré car il s’agit d’un composant COM. À partir de ce moment, vous pouvez charger les assemblys gérés avec lesquels vous devez interagir.
A partir de MSDN: Hébergement du Common Language Runtime
Pourquoi ne pas intégrer CPython à la place, avec une API destinée à être utilisée directement à partir de C / C ++. Vous perdez l'avantage des langues multiples mais vous gagnez probablement en simplicité.
Oui. Cela est possible à l'aide de Enveloppeurs Callable . En gros, vous permettez à vos classes .Net d’être appelées via COM / ActiveX à partir de votre code win32 (Delphi ou C ++).
J'utilise Exportations non gérées pour créer une interface avec le moteur de script IronPython en C #. Soyez prudent lorsque vous utilisez du code .NET à partir de Win32 Delphi - vous devez utiliser Set8087CW ($ 133F);
pour modifier le comportement des exceptions en virgule flottante.
Avez-vous vu Hydra de RemObjects? Je n'ai aucune expérience avec cela, mais de l'intro, il semble pertinent.