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-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| (...) 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-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| 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); 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?