AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi VCL: Dll-Fenster schließt mir die Hauptanwendung

VCL: Dll-Fenster schließt mir die Hauptanwendung

Ein Thema von Der schöne Günther · begonnen am 30. Dez 2014 · letzter Beitrag vom 31. Dez 2014
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.093 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

VCL: Dll-Fenster schließt mir die Hauptanwendung

  Alt 30. Dez 2014, 19:46
Szenario:
  • VCL-Anwendung mit einer Dll.
  • Die DLL ist ebenfalls mit Delphi kompiliert und bietet ein Kommando an das ein VCL-Fenster erzeugt und anzeigt.
  • Schließt man das DLL-Fenster wird die gesamte Anwendung beendet!

Das DLL-Fenster wird so erzeugt:
Delphi-Quellcode:
   Application.CreateForm(TTestForm, newForm);
   newForm.Show();
Erzeugt man das Formular so:
Delphi-Quellcode:
   newForm := TTestForm.Create(nil);
   newForm.Show();
ist alles in Butter: Schließt man das DLL-Fenster läuft die Hauptanwendung normal weiter.

Warum ist das so? Frage ich in der Hauptanwendung nach Application.MainFormHandle ändert es sich nicht. Das scheint es schon mal nicht zu sein...
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: VCL: Dll-Fenster schließt mir die Hauptanwendung

  Alt 30. Dez 2014, 20:52
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#3

AW: VCL: Dll-Fenster schließt mir die Hauptanwendung

  Alt 30. Dez 2014, 23:06
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: VCL: Dll-Fenster schließt mir die Hauptanwendung

  Alt 30. Dez 2014, 23:53
Egal wer da was mitbringt oder nicht: Fakt ist, dass eine Form, die "denkt", dass sie die MainForm ist, beim Schließen Application.Terminate aufruft. Dort wird u.a. auch PostQuitMessage(0) aufgerufen und das sendet dann ein WM_QUIT an die Anwendung

Darum wird die Anwendung geschlossen, denn die Form in der DLL, denkt, sie sei eine MainForm
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.093 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: VCL: Dll-Fenster schließt mir die Hauptanwendung

  Alt 31. Dez 2014, 10:49
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...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: VCL: Dll-Fenster schließt mir die Hauptanwendung

  Alt 31. Dez 2014, 10:56
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...
Wieso das denn?

Du darfst nur in einer DLL nicht mit TApplication herumspielen, dann wird alles gut.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#7

AW: VCL: Dll-Fenster schließt mir die Hauptanwendung

  Alt 31. Dez 2014, 11:28
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...
Wieso das denn?

Du darfst nur in einer DLL nicht mit TApplication herumspielen, dann wird alles gut.
Bei einem Nicht-VCL-Fenster wäre ich mir da gar nicht so sicher, denn das würde TApplication und insbesondere TApplication.MainForm ja gar nicht kennen (das Application.Terminate kommt immerhin in 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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: VCL: Dll-Fenster schließt mir die Hauptanwendung

  Alt 31. Dez 2014, 11:44
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...
Wieso das denn?

Du darfst nur in einer DLL nicht mit TApplication herumspielen, dann wird alles gut.
Bei einem Nicht-VCL-Fenster wäre ich mir da gar nicht so sicher, denn das würde TApplication und insbesondere TApplication.MainForm ja gar nicht kennen (das Application.Terminate kommt immerhin in 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.
Da war mir der Bezug, wo denn die Nicht-VCL-Form erzeugt worden wäre hätten sollen nicht klar.

In der DLL? Da würde es auch reichen die Form nicht mit TApplication zu verbandeln.
In der Anwendung selber? Ja, dann fliegen alle Forms weg
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:33 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