¿Alguien puede publicar aquí un ejemplo de cómo alojar CLR en Delphi? He leído question similar aquí pero no puedo usar JCL porque quiero alojarlo en Delphi 5. Gracias.Hosting CLR en Delphi con/sin JCL - ejemplo
EDIT: Este article sobre el recibimiento de CLR en Fox Pro parece prometedor, pero no sé cómo acceder a clrhost.dll de Delphi.
Edición 2: que renunciar a Delphi 5 requisito. Ahora estoy probando JCL con Delphi 7. Pero nuevamente no puedo encontrar ningún ejemplo. Aquí es lo que tengo hasta ahora:
Mi C# ensamblaje:
namespace DelphiNET
{
public class NETAdder
{
public int Add3(int left)
{
return left + 3;
}
}
}
he recopilado a DelphiNET.dll
.
Ahora quiero utilizar este conjunto de 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;
Esto termina con el error: EOleError: Variante no hace referencia a un objeto de automatización
No he trabajado con Delphi durante mucho tiempo, así que estoy atrapado aquí ...
Solución: T Aquí había un problema en la visibilidad COM que no es por defecto. Este es el ensamblado de .NET correcta:
namespace DelphiNET
{
[ComVisible(true)]
public class NETAdder
{
public int Add3(int left)
{
return left + 3;
}
}
}
Nota importante:
Cuando se trabaja con .NET de Delphi, es importante llamar Set8087CW($133F);
al comienzo de su programa (es decir, antes Application.Initialize;
). Delphi ha habilitado excepciones de coma flotante de forma predeterminada (consulte this) y al CLR no le gustan. Cuando los tuve habilitados, mi programa se bloqueó extrañamente.
¿Por qué no puedes usar JCL en Delphi 5? ¿También no después de quizás algunos cambios menores? –
El JclDotNet.pas está desarrollado con Delphi 6 y no parece cambios menores para usarlo en Delphi 5. –
¿Ha considerado Managed VCL? –