Hallo zusammen
Ich stehe im Moment mächtig auf dem Schlauch und bräuchte Hilfe bei einem vielleicht etwas ungewöhnlicherem Problem:
Ich möchte aus einer Delphi/CLX-dll heraus CLX-Forms erzeugen und aufrufen. Das ist notwendig, da diese dll innerhalb einer C++/Qt Application aufgerufen werden soll und von dort aus gehandelt werden muss.
Also habe ich (jetzt mal stark vereinfacht) eine library erzeugt mit der Struktur:
<PRE>
library testLib;
uses
SysUtils, Classes, QForms, QControls, Qt,
u_test_form in 'u_test_form.pas' {testForm};
{$R *.res}
procedure start(aApplication: TApplication); export; stdcall;
begin
aApplication.CreateForm(TtestForm, testForm);
testForm.Show;
end;
exports start;
begin
end.
</PRE>
wobei TtestForm einfach ein simpelstes Form mit gerade mal einem Button ist. Eben ein TestForm Mehr ist in der u_test_form unit auch nicht zu finden.
Rufe ich diese startroutine nun aber aus einer starterUnit (ebenfalls CLX) auf, mit 'Application' als Parameter, haut es mir das Programm weg (wärend CreateForm) mit einer ReadError Zugriffsverletzung in der qtintf.dll bei der FormEigenschaft 'Caption', lesender Zugriff auf 000000. Ich verwende übrigens noch Delphi 6.
Ich habe in diesem Forum schon mehrmals den anderen Weg gefunden, ohne Application zu verwenden, der ja für vcl auch zu klappen scheint. Unter clx erzeugt aber auch das beim TtestForm.create exakt denselben Fehler, egal, ob ich hier nil, Application oder self (aus der starterUnit mit eigenem Form) als Parameter übergebe.
Kann mir einer sagen, wo mein Denkfehler bei der Angelegenheit liegt bzw. wie ich das Problem lösen kann?
Danke, Andreas
Nachtrag:
Delphi 7 geht übrigens noch einen Schritt weiter. Eine library die in ihrer uses-Klausel QForms oder QControls einbindet, bzw. eine andere unit, die ihrerseits eine der beiden Q-units einbindet, kracht bereits beim öffnen!
Damit meine ich: library, nur mit der uses ohne irgendwelche forms zu erzeugen und meinetwegen mit einer belanglosen exportierten Procedure. Und eine Starterapplication, die nur diese dll öffnet (mehr nicht, nur öffnet, dadurch, daß sie die belanglose procedure importiert), kracht bereits beim Öffnen in eine CPU-exception.
Also CLX + DLL = Unmöglich ?
Gruß, Andreas
Ich stehe im Moment mächtig auf dem Schlauch und bräuchte Hilfe bei einem vielleicht etwas ungewöhnlicherem Problem:
Ich möchte aus einer Delphi/CLX-dll heraus CLX-Forms erzeugen und aufrufen. Das ist notwendig, da diese dll innerhalb einer C++/Qt Application aufgerufen werden soll und von dort aus gehandelt werden muss.
Also habe ich (jetzt mal stark vereinfacht) eine library erzeugt mit der Struktur:
<PRE>
library testLib;
uses
SysUtils, Classes, QForms, QControls, Qt,
u_test_form in 'u_test_form.pas' {testForm};
{$R *.res}
procedure start(aApplication: TApplication); export; stdcall;
begin
aApplication.CreateForm(TtestForm, testForm);
testForm.Show;
end;
exports start;
begin
end.
</PRE>
wobei TtestForm einfach ein simpelstes Form mit gerade mal einem Button ist. Eben ein TestForm Mehr ist in der u_test_form unit auch nicht zu finden.
Rufe ich diese startroutine nun aber aus einer starterUnit (ebenfalls CLX) auf, mit 'Application' als Parameter, haut es mir das Programm weg (wärend CreateForm) mit einer ReadError Zugriffsverletzung in der qtintf.dll bei der FormEigenschaft 'Caption', lesender Zugriff auf 000000. Ich verwende übrigens noch Delphi 6.
Ich habe in diesem Forum schon mehrmals den anderen Weg gefunden, ohne Application zu verwenden, der ja für vcl auch zu klappen scheint. Unter clx erzeugt aber auch das beim TtestForm.create exakt denselben Fehler, egal, ob ich hier nil, Application oder self (aus der starterUnit mit eigenem Form) als Parameter übergebe.
Kann mir einer sagen, wo mein Denkfehler bei der Angelegenheit liegt bzw. wie ich das Problem lösen kann?
Danke, Andreas
Nachtrag:
Delphi 7 geht übrigens noch einen Schritt weiter. Eine library die in ihrer uses-Klausel QForms oder QControls einbindet, bzw. eine andere unit, die ihrerseits eine der beiden Q-units einbindet, kracht bereits beim öffnen!
Damit meine ich: library, nur mit der uses ohne irgendwelche forms zu erzeugen und meinetwegen mit einer belanglosen exportierten Procedure. Und eine Starterapplication, die nur diese dll öffnet (mehr nicht, nur öffnet, dadurch, daß sie die belanglose procedure importiert), kracht bereits beim Öffnen in eine CPU-exception.
Also CLX + DLL = Unmöglich ?
Gruß, Andreas
Comment