Einzelnen Beitrag anzeigen

IronEddie

Registriert seit: 9. Okt 2002
13 Beiträge
 
#1

Dynamisch DLLs einbinden & Objekte - Pointer-Problem

  Alt 16. Feb 2004, 17:43
Ich habe folgendes Problem:

Ich kapsel in DLLs Nachfahren einer Klasse, die ich dann dynamisch in meinem Hauptprogramm laden kann (Exportroutinen für Daten aus einer IB-Datenbank).

Im Hauptprogramm liegt eine Variable der Stammklasse vor. Ich lade mir dann die gewünschte DLL, welche eine Methode hat, die "ihr" Export-Objekt erzeugt und zurück gibt...

Delphi-Quellcode:

// Routine in der DLL

(...)
var Fibu : TFibustamm;
(...)

function CreateEnvironment(aTransaction : Pointer; aStammdaten : pointer) : pointer;
begin

  Transaction := TIBTransaction(aTransaction);
  Stammdaten := TStammdaten(aStammdaten);

  Fibu := TAddison.Create(nil, Stammdaten, Transaction);
  Result := Fibu;

end;
Delphi-Quellcode:
// Ausschnitt Hauptprogramm

          FuncPtr := GetProcAddress(FibuDLLHandle, PChar('CreateEnvironment'));

          if FuncPtr = nil then
            begin
              ManBuchhaltung.Enabled := false;
              ParadoxFound := false;
              FrmMessageWindow.MessageAn('Fibu-Datenbank nicht aktiv');
            end
          else
            begin
              @CreateEnv := FuncPtr;
              Fibu := CreateEnv(DM.IBT, Stammdaten); // <- hier schebbertz
              FuncPtr := nil;
            end;

An der angegebenen stelle tritt ein Fehler auf: Lesen von Adresse $0

Ich vermute das die Eigenschaften und Parameter der Objekte nicht korrekt zur routine aus der DLL wandern... Kann ich überhaupt komplexe Objekte in die DLL übergeben / herausbekommen?

Was mache ich Falsch?
  Mit Zitat antworten Zitat