Hallo!
Ich versuche gerade, in Delphi 5 eine Klasse zu entwerfen, mit der man über die un/zip.dll von Info-Zip (geschrieben in C) und den Delphi-Ports von Theo Bebekis zip-Dateien entpacken kann.
Zum Datenaustausch zwischen dll und Programm wird dabei ein Record aus Funktionspointern verwendet (wenn ich richtig weiß, nennt man das Callback - bin Delphi-Anfänger!).
Wenn ich diese Funktionen als Klassenmethoden implementiere, läuft das Programm nicht (dieser Versuch ist schon ein bisschen her, ich glaube, es ist dann mit Seg.faults ausgestiegen). Ich habe mir sagen lassen, dass Delphi dabei einen zusätzlichen Parameter in die Funktion einbaut (den self-Pointer).
Wenn ich die Funktionen global definiere, kann ich die Klasse (bzw. die entsprechenden Instanzen) logischerweise nicht derefenzieren, weil mir ein Pointer (eben z.B. self) fehlt.
Jetzt habe ich einen globalen Pointer definiert, den ich vor jedem DLL-Aufruf auf das entsprechende Objekt setze und über eine bool-Variable sperre ich für andere Instanzen den Zugriff. Das ist aber ... elendes Gefuddel ;o).
Wie stelle ich es an, dass ich in den der DLL-übergebenen Callback-Funktionen das richtige Objekt ansprechen kann?
Vielen Dank!
Daniel Fiederling
Ich versuche gerade, in Delphi 5 eine Klasse zu entwerfen, mit der man über die un/zip.dll von Info-Zip (geschrieben in C) und den Delphi-Ports von Theo Bebekis zip-Dateien entpacken kann.
Zum Datenaustausch zwischen dll und Programm wird dabei ein Record aus Funktionspointern verwendet (wenn ich richtig weiß, nennt man das Callback - bin Delphi-Anfänger!).
Wenn ich diese Funktionen als Klassenmethoden implementiere, läuft das Programm nicht (dieser Versuch ist schon ein bisschen her, ich glaube, es ist dann mit Seg.faults ausgestiegen). Ich habe mir sagen lassen, dass Delphi dabei einen zusätzlichen Parameter in die Funktion einbaut (den self-Pointer).
Wenn ich die Funktionen global definiere, kann ich die Klasse (bzw. die entsprechenden Instanzen) logischerweise nicht derefenzieren, weil mir ein Pointer (eben z.B. self) fehlt.
Jetzt habe ich einen globalen Pointer definiert, den ich vor jedem DLL-Aufruf auf das entsprechende Objekt setze und über eine bool-Variable sperre ich für andere Instanzen den Zugriff. Das ist aber ... elendes Gefuddel ;o).
Wie stelle ich es an, dass ich in den der DLL-übergebenen Callback-Funktionen das richtige Objekt ansprechen kann?
Vielen Dank!
Daniel Fiederling
Comment