Hallo zusammen!
Ich habe vor mit dynamisch geladenen Packages zu arbeiten, um ein Programm zu flexibilisieren / Programmfunktionen zu kapseln.
Dabei übergebe ich eine IB_Connection an die dynamisch geladene Funktion, die im Folgenden innerhalb der geladenen
BPL verwendet werden soll.
Und genau dann fangen die Probleme an: Ich kann die Connection zwar der
Query zuweisen und im "Auswerten/Ändern" scheinen alle Werte korrekt vorhanden zu sein, jedoch bekomme ich dann beim qry.Open eine Zugriffsverletzung. Vermutlich liegt das Problem im Speichermanagement, aber ich komme an der Stelle nicht weiter. Kann jemand das Problem diagnostizieren und weiß eventuell eine Lösung?
Hier nun der relevante Quelltext der aufrufenden Exe:
Delphi-Quellcode:
procedure TfrmListen.BitBtnTESTClick(Sender: TObject);
var
hm: HModule;
ExecF:
procedure(Owner: TIB_Connection);
begin
hm:=LoadPackage(ExtractFilePath(ParamStr(0)) + '
TEST.bpl');
if hm <> 0
then
try
@ExecF:=GetProcAddress(hm, '
RUN');
if Assigned(ExecF)
then
begin
ExecF(fsbListen.Databases.Mandant);
end
else
begin
ShowMessage ('
Kein RunProgram gefunden!');
end;
finally
UnloadPackage(hm);
end
else
ShowMessage ('
bpl nicht gefunden');
end;
Und nun die Methoden der
BPL:
Delphi-Quellcode:
procedure RUN(Owner: TIB_Connection);
var
frm: TForm1;
begin
frm := TForm1.Create(Owner);
frm.ShowModal;
end;
constructor TForm1.Create(Owner: TIB_Connection);
begin
FOwner := Owner;
inherited Create(FOwner);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
qry: TIB_query;
begin
showmessage(FOwner.DatabaseName);
qry := TIB_Query.Create(FOwner);
qry.IB_Connection := FOwner;
qry.SQL.Text := 'select * from beharzt';
showmessage('bis hier komm ich');
qry.Open;
//IB_Query1.IB_Connection := FOwner;
//IB_Query1.Open;
end;
exports RUN;
Viele Grüße
Rob
PS: Das Ganze wird unter D2006 Enterprise mit IBObjects 4.8 entwickelt