Qualcuno può pubblicare qui un esempio su come ospitare CLR in Delphi? Ho letto lo stesso question qui, ma non posso usare JCL perché lo voglio ospitare in Delphi 5. Grazie.Hosting CLR in Delphi con/senza JCL - esempio
EDIT: Questo article sull'hosting CLR a Fox Pro sembra essere molto promettente, ma non so come accedere clrhost.dll da Delphi.
Edit 2: mi arrendo su Delphi 5 requisito. Ora sto provando JCL con Delphi 7. Ma ancora non riesco a trovare alcun esempio. Ecco quello che ho fino ad ora:
mio C# di montaggio:
namespace DelphiNET
{
public class NETAdder
{
public int Add3(int left)
{
return left + 3;
}
}
}
ho compilato a DelphiNET.dll
.
Ora voglio utilizzare questo assembly da Delphi:
uses JclDotNet, mscorlib_TLB;
procedure TForm1.Button1Click(Sender: TObject);
var
clr: TJclClrHost;
ads: TJclClrAppDomainSetup;
ad: TJclClrAppDomain;
ass: TJclClrAssembly;
obj: _ObjectHandle;
ov: OleVariant;
begin
clr := TJclClrHost.Create();
clr.Start;
ads := clr.CreateDomainSetup;
ads.ApplicationBase := 'C:\Delhi.NET';
ads.ConfigurationFile := 'C:\Delhi.NET\my.config';
ad := clr.CreateAppDomain('myNET', ads);
obj := (ad as _AppDomain).CreateInstanceFrom('DelphiNET.dll', 'DelphiNET.NETAdder');
ov := obj.Unwrap;
Button1.Caption := 'done ' + string(ov.Add3(5));
end;
Questo finisce con l'errore: EOleError: Variant non fa riferimento a un oggetto di automazione
non ho lavorato con Delphi per un lungo tempo così mi sono bloccato qui ...
Soluzione: T qui c'era un problema nella visibilità di COM che non era di default. Questo è l'assembly .NET corretta:
namespace DelphiNET
{
[ComVisible(true)]
public class NETAdder
{
public int Add3(int left)
{
return left + 3;
}
}
}
Nota importante:
Quando si lavora con .NET da Delphi, è importante chiamare Set8087CW($133F);
all'inizio del programma (vale a dire prima del Application.Initialize;
). Delphi ha abilitato le eccezioni in virgola mobile per impostazione predefinita (vedere this) e CLR non le apprezza. Quando li ho abilitati, il mio programma si è stranamente congelato.
Perché non è possibile utilizzare JCL in Delphi 5? Inoltre, non dopo forse alcune piccole modifiche? –
JclDotNet.pas è sviluppato con Delphi 6 e non presenta modifiche minori per l'utilizzo in Delphi 5. –
Hai considerato Managed VCL? –