Czy ktoś może zamieścić tutaj przykład jak hostować CLR w Delphi? Przeczytałem podobne tutaj question, ale nie mogę używać JCL, ponieważ chcę go hostować w Delphi 5. Dziękuję.Hostowanie CLR w Delphi za pomocą/bez JCL - przykład
EDIT: Ten article o hosting CLR w Fox Pro wygląda obiecująco, ale nie wiem, jak uzyskać dostęp do clrhost.dll z Delphi.
Edit 2: daję się na Delphi 5 wymogu. Teraz próbuję JCL z Delphi 7. Ale znowu nie mogę znaleźć żadnego przykładu. Oto co mam do tej pory:
Mój zespół C#:
namespace DelphiNET
{
public class NETAdder
{
public int Add3(int left)
{
return left + 3;
}
}
}
Mam przygotował go do DelphiNET.dll
.
Teraz chcę używać tego zestawu z 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;
To kończy się błędem: EOleError: Variant nie odwoływać się do obiektu automatyzacji
ja nie pracowałem z Delphi za długa czas więc siedzę tutaj ...
Rozwiązanie: T tutaj był problem z widocznością COM, która nie jest domyślnie. Jest to prawidłowa NET:
namespace DelphiNET
{
[ComVisible(true)]
public class NETAdder
{
public int Add3(int left)
{
return left + 3;
}
}
}
Ważna uwaga:
Podczas pracy z .NET z Delphi, ważne jest wywołanie Set8087CW($133F);
na początku programu (czyli przed Application.Initialize;
). Delphi domyślnie włączył wyjątki zmiennoprzecinkowe (zobacz this), a CLR ich nie lubi. Kiedy miałem je włączone, mój program dziwnie się zawiesił.
Dlaczego nie możesz używać JCL w Delphi 5? A może po drobnych zmianach? –
JclDotNet.pas został opracowany w Delphi 6 i nie wygląda na niewielkie zmiany, aby można go było używać w Delphi 5. –
Czy rozważałeś zarządzanie VCL? –