Размещение среды выполнения .NET в программе Delphi

Использование Guava :

byte[] bytearray = Ints.toByteArray(1695609641);

13
задан Osama Al-Maadeed 4 November 2008 в 01:08
поделиться

7 ответов

В Библиотеке кода джедая (JCL) - свободный - существует JclDotNet.pas, содержа класс TJclClrHost, вероятно, делая то, что Вы хотите:

  TJclClrHost = class(TJclClrBase, ICorRuntimeHost)
  private
    FDefaultInterface: ICorRuntimeHost;
    FAppDomains: TObjectList;
    procedure EnumAppDomains;
    function GetAppDomain(const Idx: Integer): TJclClrAppDomain;
    function GetAppDomainCount: Integer;
    function GetDefaultAppDomain: IJclClrAppDomain;
    function GetCurrentAppDomain: IJclClrAppDomain;
  protected
    function AddAppDomain(const AppDomain: TJclClrAppDomain): Integer;
    function RemoveAppDomain(const AppDomain: TJclClrAppDomain): Integer; 
  public
    constructor Create(const ClrVer: WideString = '';
      const Flavor: TJclClrHostFlavor = hfWorkStation;
      const ConcurrentGC: Boolean = True;
      const LoaderFlags: TJclClrHostLoaderFlags = [hlOptSingleDomain]);
    destructor Destroy; override;
    procedure Start;
    procedure Stop;
    procedure Refresh;
    function CreateDomainSetup: TJclClrAppDomainSetup;
    function CreateAppDomain(const Name: WideString;
      const Setup: TJclClrAppDomainSetup = nil;
      const Evidence: IJclClrEvidence = nil): TJclClrAppDomain;
    function FindAppDomain(const Intf: IJclClrAppDomain; var Ret: TJclClrAppDomain): Boolean; overload;
    function FindAppDomain(const Name: WideString; var Ret: TJclClrAppDomain): Boolean; overload;
    class function CorSystemDirectory: WideString;
    class function CorVersion: WideString;
    class function CorRequiredVersion: WideString;
    class procedure GetClrVersions(VersionNames: TWideStrings); overload;
    class procedure GetClrVersions(VersionNames: TStrings); overload;
    property DefaultInterface: ICorRuntimeHost read FDefaultInterface implements ICorRuntimeHost;
    property AppDomains[const Idx: Integer]: TJclClrAppDomain read GetAppDomain; default;
    property AppDomainCount: Integer read GetAppDomainCount;
    property DefaultAppDomain: IJclClrAppDomain read GetDefaultAppDomain;
    property CurrentAppDomain: IJclClrAppDomain read GetCurrentAppDomain;
  end;
7
ответ дан Stefan Schultze 4 November 2008 в 01:08
поделиться

Вы могли использовать Delphi для .NET и неуправляемого экспорта, также названного обратным P/Invoke.

Это по существу позволяет Вам создать .NET .dll, который имеет полный доступ к платформе .NET, но может быть загружен любым родным языком, точно так же, как Вы были бы с любым .dll, и без издержек com interop.

Вот простой пример: http://cc.codegear.com/Item/22688

2
ответ дан Bruce McGee 4 November 2008 в 01:08
поделиться

У меня была эта точно та же самая проблема. Я работал в магазине Delphi, и они хотели начать добавлять функциональность к приложению Delphi прежней версии с.NET и C#. Я смотрел на Управляемый-VLC, и я решил пропустить его, поскольку я чувствовал, что это имело некоторые серьезные проблемы. Я нашел что-то намного более простым здесь: Delphi.NET .Примечание: это не версия Delphi, который работает исходно на.NET. Это - проект с открытым исходным кодом позволить приложениям Delphi прежней версии получать доступ к функциональности.NET через COM и отражение. Даже при том, что это старо, это работает как очарование, так как это использует COM. Я проверю, что это работает с.NET 2.0 и 3.5. Я получил.NET DLL, полностью интегрированный в наше приложение Delphi 5 прежней версии в течение многих дней. Мой босс думал, что я был супергероем.Удачи!

3
ответ дан postfuturist 4 November 2008 в 01:08
поделиться

Хостинг CLR самостоятельно не является всем этим трудным (особенно, если Вы просто используете единственный AppDomain). Можно использовать COM, базирующийся, размещая API, чтобы запустить время выполнения, блоки загрузки, создать объекты и вызвать методы на них.

существует много информации онлайн, например, документация MSDN относительно" Хостинг Общеязыковой среды выполнения ". ( новый домашний )

7
ответ дан Ian Boyd 4 November 2008 в 01:08
поделиться

Я могу сказать Вам из собственного опыта, что взаимодействие с .NET от Delphi не является никаким пикником. Я - парень .NET, но работал в .NET и магазине Delphi некоторое время. Я управлял несколькими проектами, которые записал в .NET (WinForms и WPF), но назвал Delphi. Наши парни Delphi записали уровень взаимодействия для Delphi для обращений к библиотекам .NET, так как все наши новые продукты писались в .NET. Это была проблема нам (и они были хорошими разработчиками Delphi). Если бы мы, возможно, купили хороший сторонняя библиотека, чтобы сделать interop для нас, это более, чем стоило бы того. Я держал пари, что мы потратили тысячи долларов в человеко-часах пишущие и отлаживающие проблемы с interop от Delphi до .NET.

я взял бы ту библиотеку Managed-VLC для тест-драйва, чтобы видеть, как хорошо она работает. Если это соответствует своей рекламе, то это легко стоит 250$.

6
ответ дан Jason Jackson 4 November 2008 в 01:08
поделиться

Можно использовать классы .NET в качестве COM-объектов в Delphi:

  • создают блок в C#
  • , создают библиотеку типов для блока
  • библиотека типов импорта в Delphi

Теперь, можно получить доступ к классам от блока .NET, которые экспортируются в библиотеке типов.

2
ответ дан zendar 4 November 2008 в 01:08
поделиться

Смотрите мой вопрос для примера хостинга CLR в Delphi с JCL.

4
ответ дан 1 December 2019 в 20:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: