Einzelnen Beitrag anzeigen

robvs

Registriert seit: 3. Jul 2006
30 Beiträge
 
#1

Probleme / Zugriffsverletzung mit dynamisch geladener BPL

  Alt 8. Okt 2008, 16:29
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
  Mit Zitat antworten Zitat