Zitat:
Ich will ja auch nicht die Objekte aus der
DLL holen, ich will nur der
DLL sagen "mach mal ein Objekt, hier hast du die parameter, gib mir die referenz als pointer zurück"...
das klang vorhins ganz anders
Zitat:
Kann ich überhaupt komplexe Objekte in die
DLL übergeben / herausbekommen?
probier mal das:
Delphi-Quellcode:
// Routine in der DLL
(...)
var Fibu : TFibustamm;
(...)
function CreateEnvironment(aTransaction : TIBTransaction; aStammdaten : TStammdaten) :TFibuStamm;
//man kann doch die Objekte direkt übergeben (aTransaction:[b]TIBTransaction[/b]). Sie werden doch sowieso als Pointer übergeben, soviel ich weiss
begin
Fibu := TAddison.Create(
nil, aStammdaten, aTransaction);
Result := Fibu;
end;
Delphi-Quellcode:
// Ausschnitt Hauptprogramm
uses Objekt_Unit_TFibustamm;
type
TCreateEnv = function (aTransaction : TIBTransaction; aStammdaten : TStammdaten) :TFibuStamm;
private
Fibu:TFibuStamm;
CreateEnv:TCreateEnv;
CreateEnv := GetProcAddress(FibuDLLHandle, PChar('CreateEnvironment'));
if not Assigned(CreateEnv) then
begin
ManBuchhaltung.Enabled := false;
ParadoxFound := false;
FrmMessageWindow.MessageAn('Fibu-Datenbank nicht aktiv');
end
else
begin
Fibu := CreateEnv(DM.IBT, Stammdaten);
end;
PS: normalerweise entwickelt man in so einem Fall eine Three-tier-Architektur in der im Application-Server der
DB-
Zugriff gekapselt ist. Dort meist der Einsatz von
COM/
DCOM. Dort ist
ADO schön, da dort das Recordset in Binärform
übertragen wird und Windows alles umwandelt.
Oh je werde Off-Topic