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?