Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Aufrufendes Objekt im Stack ermitteln (https://www.delphipraxis.net/204694-aufrufendes-objekt-im-stack-ermitteln.html)

BobTheBuilder 19. Jun 2020 15:51

Aufrufendes Objekt im Stack ermitteln
 
Hallo zusammen,

ich war mir nicht sicher, was ich genau in den Titel schreiben soll. Ich hoffe, das passt in etwa.
Mein Problem ist folgendes:

Ich habe eine ActiveX/Com DLL in Delphi und eine Exe in einer anderen Sprache.

Die Exe instanziert sich jetzt ein Objekt der Hauptklasse der DLL.

Und dann ist da halt viel Code in verschiedenen Units der DLL, der stellenweise eine Information vom Hauptobjekt oder auch direkt der Exe braucht.

Als Beispiel kann hier die selbstimplementierte Funktion "ShowMessageErrorWithTitle" dienen. Da muss jedes mal frisch von der Exe erfragt werden, wo sich deren Hauptfenster befindet, damit die Error-Message darauf zentriert werden kann.

Das kann man über das Events-Objekt machen, das an dem Hauptobjekt der DLL pappt. Das funktioniert ansich auch wunderbar.

Aber es ist super unpraktisch, dieses Events-Objekt jetzt jeder Funktion mitzugeben, nur damit ich auch im hintersten Winkel der DLL noch eine Error-Message anzeigen kann.

Eine andere "Lösung" wäre es, dieses Events-Objekt in eine globale Variable zu schreiben, auf die jede Unit Zugriff hat. Das funktioniert, bis mehr als eine Instanz der Hauptklasse existiert, weil die sich ja gegenseitig diese globale Variable überschreiben.

Und genau an der Stelle stehe ich jetzt gerade.

Meine neuste Idee ist es nun, dass ich vielleicht abfragen kann, welche Instanz der Hauptklasse die Funktion aufgerufen hat, in der man gerade ist. Darüber würde ich dann immer an das richtige Events-Objekt gelangen.

Deswegen würde ich gerne wissen, ob man vielleicht irgendwie in eine x-beliebigen Funktion abfragen kann, was der Call-Stack ist und ob sich darin irgendwo ein Objekt vom gesuchten Typ befindet.

Geht sowas?

MfG

Bob

BobTheBuilder 22. Jun 2020 10:22

AW: Aufrufendes Objekt im Stack ermitteln
 
Ich habe es jetzt so gelöst, dass beim Laden der DLL eine Liste erstellt wird, in die alle FEvents rein geschrieben werden beim Erstellen der Objekte und beim Zerstören kann dann das passende Objekt wieder aus der Liste gelöscht werden.

Damit bekomme ich zwar keine richtige Zuordnung, aber ich schreibe mir zu jedem FEvents dazu, ob es direkt auf die Exe verweist und dann ist es mir an sich egal, ob die Objekte jetzt über ihr eigenes FEvents mit der Exe kommunizieren oder über ein fremdes.

Ich hoffe mal nicht, dass das zu Problemen führen kann, erscheint mir jetzt so, dass das den Umständen entsprechend die beste Lösung ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz