![]() |
VCL: Dll-Fenster schließt mir die Hauptanwendung
Szenario:
Das DLL-Fenster wird so erzeugt:
Delphi-Quellcode:
Erzeugt man das Formular so:
Application.CreateForm(TTestForm, newForm);
newForm.Show();
Delphi-Quellcode:
ist alles in Butter: Schließt man das DLL-Fenster läuft die Hauptanwendung normal weiter.
newForm := TTestForm.Create(nil);
newForm.Show(); Warum ist das so? Frage ich in der Hauptanwendung nach
Delphi-Quellcode:
ändert es sich nicht. Das scheint es schon mal nicht zu sein...
Application.MainFormHandle
|
AW: VCL: Dll-Fenster schließt mir die Hauptanwendung
Das Application-Objekt der DLL und der Hauptanwendung sind vermutlich nicht dieselbe Instanz. Daher denkt die DLL, dass das letzte und einzige Fenster geschlossen wurde, und würgt das Programm anschließend ab. Vermute ich. Habe damit nie gearbeitet.
|
AW: VCL: Dll-Fenster schließt mir die Hauptanwendung
Um das mal etwas zu verdeutlichen: Eine DLL bringt ihre eigene RTL und VCL/FMX Laufzeitumgebung mit, die sich von der des Hauptprogramms unterscheidet. Daher ist Application innerhalb der DLL eine ander Instanz als Application innerhalb der Exe. Will man in beiden Fällen dieselbe Instanz haben, muss man Packages verwenden.
|
AW: VCL: Dll-Fenster schließt mir die Hauptanwendung
Egal wer da was mitbringt oder nicht: Fakt ist, dass eine Form, die "denkt", dass sie die MainForm ist, beim Schließen
Delphi-Quellcode:
aufruft. Dort wird u.a. auch
Application.Terminate
Delphi-Quellcode:
aufgerufen und das sendet dann ein WM_QUIT an die Anwendung :)
PostQuitMessage(0)
Darum wird die Anwendung geschlossen, denn die Form in der DLL, denkt, sie sei eine MainForm |
AW: VCL: Dll-Fenster schließt mir die Hauptanwendung
Wahnsinn. Das heißt: Egal ob DLLs oder nicht- Hätte ich ein Nicht-VCL-Fenster mir selbst erzeugt würde das auch einfach mal geschlossen werden. Nett.
Ich glaube, ich gewöhne mir dieses schräge TApplication ganz ab... |
AW: VCL: Dll-Fenster schließt mir die Hauptanwendung
Zitat:
Du darfst nur in einer DLL nicht mit
Delphi-Quellcode:
herumspielen, dann wird alles gut.
TApplication
|
AW: VCL: Dll-Fenster schließt mir die Hauptanwendung
Zitat:
Delphi-Quellcode:
und insbesondere
TApplication
Delphi-Quellcode:
ja gar nicht kennen (das
TApplication.MainForm
Delphi-Quellcode:
kommt immerhin in
Application.Terminate
Delphi-Quellcode:
).
TCustomForm.Close
Abgesehen davon ist es mit Delphi und allem was damit einher kommt wie mit jedem Werkzeug: man muss damit umzugehen wissen oder man muss es eben lernen. |
AW: VCL: Dll-Fenster schließt mir die Hauptanwendung
Zitat:
In der DLL? Da würde es auch reichen die Form nicht mit
Delphi-Quellcode:
zu verbandeln.
TApplication
In der Anwendung selber? Ja, dann fliegen alle Forms weg :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 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