Hosting CLR in Delphi with/without JCL - example

前端 未结 5 691
渐次进展
渐次进展 2020-11-27 13:13

Can somebody please post here an example how to host CLR in Delphi? I have read similar question here but I cannot use JCL as I want to host it in Delphi 5. Thank you.

5条回答
  •  时光取名叫无心
    2020-11-27 13:17

    Here you go:

    program CallDotNetFromDelphiWin32;
    
    {$APPTYPE CONSOLE}
    
    uses
      Variants, JclDotNet, mscorlib_TLB, SysUtils;
    
    var
      Host: TJclClrHost;
      Obj: OleVariant;
    begin
      try
        Host := TJclClrHost.Create;
        Host.Start;
        WriteLn('CLRVersion = ' + Host.CorVersion);
    
        Obj := Host.DefaultAppDomain.CreateInstance('DelphiNET', 'DelphiNET.NETAdder').UnWrap;
        WriteLn('2 + 3 = ' + IntToStr(Obj.Add3(2)));
    
        Host.Stop;
      except
        on E: Exception do
          Writeln(E.Classname, ': ', E.Message);
      end;
    end.
    

    Note: Assumes that the DelphiNET.NETAdder type and the Add3 method in DelphiNet.dll is ComVisible. Thanks to Robert.

    Update:

    When using reflection you do not need the ComVisible attribute. Next example even works without being ComVisible.

    Assm := Host.DefaultAppDomain.Load_2('NetAddr');
    T := Assm.GetType_2('DelphiNET.NETAdder');
    Obj := T.InvokeMember_3('ctor', BindingFlags_CreateInstance, nil, null, nil);
    Params := VarArrayOf([2]);
    WriteLn('2 + 3 = ' + IntToStr(T.InvokeMember_3('Add3', BindingFlags_InvokeMethod, nil, Obj, PSafeArray(VarArrayAsPSafeArray(Params)))));
    

提交回复
热议问题