![]() |
"fremdes" objekt mittels pointer "fernsteuern
Hi,
ich habe in einer DLL ein Array von Objekten definiert. Mittels einer exportierten Fkt wird ein TMethod-Record aus der DLL zurückgegeben die den Pointer auf ein Objekt im Array enthält und einen Pointer zu der im Objekt enthaltenen Callback-Fkt, die wiederum einen Pointer einer anderen Fkt zurückgibt. Meine Frage ist nun, wie muss ich es anstellen damit diese Funktionen korrekt aufgerufen werden? Ich habe ein, meiner Meinung nach, äquivalentes Objekt im Hauptprogramm erstellt dem ich den Data-Pointer zuweise, aber nachdem ich die Callback-Fkt ein Mal aufgerufen habe, sind Teile des Objekts mit unrealistischen Werten belegt, die vor dem Callback-Aufruf noch keine Werte haben und auch nicht haben sollten. Zur Verständlichung mal etwas Pseudo-Code: DLL:
Delphi-Quellcode:
Hauptpogramm:type tmein_obj = class i : integer; function callbackfkt(which_fkt:shortstring):tmethod;stdcall; function andere1:shortstring;stdcall; procedure andere2;stdcall; constructor create; destructor destroy; end; var meine_objekte : array of tmein_obj; //eine exportierte Fkt: function get_obj:tmethod;stdcall; begin get_obj.data := @meine_objekte[0]; get_obj.code := @tmein_obj.callbackfkt; end; function tmein_objekt.callbackfkt(which_fkt:shortstring):tmethod; stdcall; begin callbackfkt.data := self; if which_fkt = 'andere1' then callbackfkt.code := @tmein_obj.andere1; if which_fkt = 'andere2' then callbackfkt.code := @tmein_obj.andere2; end; ...
Delphi-Quellcode:
Bei Zustand 1 ist "ein_obj" noch mit korrekten Werten belegt.type tmein_obj = class i : integer; callbackfkt : function (self:tmein_obj;which_fkt:shortstring):tmethod;stdcall; andere1 : function :shortstring;stdcall; andere2 : procedure;stdcall; // constructor create; // destructor destroy; end; var ein_obj : tmein_obj; procedure init; var buf : tmethod; begin buf := get_obj; ein_obj := buf.data; @ein_obj.callbackfkt := buf.code; // Zustand 1 @ein_obj.andere1 := ein_obj.callbackfkt(ein_obj,'andere1'); // Zustand 2 end; Bei Zustand 2 ist "ein_obj" dann nur noch teilweise mit korrekten Werten belegt. z.B. callbackfkt zeigt auf eine falsche Adresse. Weiss jemand, was ich falsch mache? (ich hoffe mal ich hab jetzt nichts vergessen) Vielen Dank! Mario |
Re: "fremdes" objekt mittels pointer "fernste
Oder könnte mir zumindest jemand sagen, wo ich Informationen
dazu finden könnte? Ich kann das Problem zwar umgehen, aber ich fände es so praktischer. Danke! Mario |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz