Inhalt einer globalen Variable sowohl in .exe als auch in .dll verändern?
-
Hallo zusammen,
ich brüte jetzt schon seit einiger Zeit über einem Problem, welches mir nahezu schlaflose Nächte beschert. Ich vereinfache das ganze hier ein wenig, es sollte aber rüberkommen, was ich will:
Mein Projekt besteht a) aus einer Hauptanwendung ("formMain" aus der dann quasi die .exe generiert wird), welches ein Formular beinhaltet und b) aus einem Anwendungsteil mit einem Formular ("formLogin"), aus der eine .dll erstellt wird.
Ich kann nun prima Funktionen aus der .dll aufrufen, nur bei der Verwendung von globalen Variablen stoße ich auf ein riesiges Hindernis. Ich brauche nämlich Daten in "formMain", die erst von "formLogin" ermittelt werden. Probiert hab ich jetzt zwei Möglichkeiten:
Ich habe in der Header-Datei "global.h" mit 'extern' eine globale Variable erstellt, die danach auch sowohl in "formMain" als auch in "formLogin" bekannt war. Ich konnte nun innerhalb der .exe den Variableninhalt ohne Probleme setzen. Hab ich das ganze dann in der .dll versucht, hat er die Zeile mit dem der Variablenwert verändert werden sollte zwar ausgeführt, in der Variablen stand jedoch dasselbe drin, wie zuvor - sprich nichts ist passiert.
Danach hab ich mir gedacht kein Problem, dann erstelle ich halt in "formMain" die Variable und gib seine Adresse beim DLL-Aufruf dann einfach als Parameter mit. So weit, so gut...
Beim Debuggen hat sich dann folgendes herausgestellt:a) Beim Aufruf der DLL-Funktion (welche auch "formLogin" erstellt) kann ich diese Adresse dann verwenden und auch den Wert der Variable ändern.
b) Erstellt die DLL-Funktion ein TForm (= "formLogin") und gibt dem Konstruktor die Adresse weiter, dann kann ich im Konstruktor von "formLogin" zwar die Adresse wunderbar auslesen, wenn ich sie aber verwenden/verändern will, dann ändert sich überhaupt nichts. Will ich einem lokalen Pointer die Adresse der übergebenen Variable zuweisen, bleibt der lokale Pointer auf NULL.
c) Auch wenn ich es schaffe, in "formLogin" etwas am Variableninhalt zu ändern, ist spätestsn bei Rückkehr zu "formMain" wieder alles beim Alten.
d) Übergebe ich zusätzlich auch noch die Adresse einer TADOConnection und versuche die Adresse ebenfalls meinem lokalen Pointer zuzuweisen, dann bleibt der zwar trotzdem auf NULL, wenn ich irgendwo innerhalb dann aber z. B. einer TADOQuery als Connection dieses "NULL"-Objekt zuweise, hat die Query trotz des NULL einen gültige Verbindung.
Ihr seht mich quasi auf Knien vor euch robben und anflehen
Vielleicht stell ich mich auch zu sehr an. Ganz kurz soll nur folgendes passieren:"formMain" (.exe) soll mit einer Variablen arbeitet können, deren Inhalt in "formLogin" (.dll) UND in "formMain" verändert werden kann. Klingt simpel

Trotz des vielen Textes hoffe ich, daß sich jemand dem Ganzen annimmt und bin euch schonmal für jeden Tip dankbar.
Mipe
-
So, das Problem hat sich nun quasi erledigt. Hab die DLL nun einfach nicht mehr statisch, sondern dynamisch verlinkt und plötzlich geht's ganz ohne Probleme... da fragt man sich doch

Mipe