forms in dll erzeugen/aufrufen ?

AndreasJ

Grünschnabel
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:

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.

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 Zugriffsverletzung in der qtintf.dll bei der FormEigenschaft 'Caption'. Ein einfaches TtestForm.create ergibt denselben Fehler. Ich verwende übrigens noch Delphi 6.

Kann mir einer sagen, wo mein Denkfehler bei der Angelegenheit liegt bzw. wie ich das Problem lösen kann?

Danke, Andreas
 
Zuletzt bearbeitet:
Versuch es mal so:

in der Unit testform.pas

....
initialization
if Testform=nil then begin
TestForm:=TTestform.Create(nil);
end;
finalization
if Testform <> nil then begin
Testform.Free;
Testform:=nil;
end;
end.

und in der library kannst du dann auf start verzichten, da bei Verwendung von testform durch den initialization-Block das Formulat erzeugt wird.

Sollte so funzen, glaub ich,
vop
 
Nein, klappt auch nicht.

Inzwischen hat mir jemand geschrieben, daß es an CLX liegt, welches sich ganz einfach nicht mit DLLs vertägt. Delphi7 stürzt gleich ganz in ne CPU-Exception, wenn eine DLL nur geöffnet werden soll, die irgendweo direkt oder indirekt eine QT/CLX-unit einbindet.

Inzwischen schreibe ich alles auf vcl um.

Trotzdem Danke.
 
Zurück