Nichtmodale Dialoge in DLL benutzen



  • Wie das Topic schon sagt, möchte ich nichtmodale Dialoge in einer DLL benutzen. Es sollen beliebig viele Dialoge möglich sein.
    Wie bekomme ich das hin?
    Momentan probiere ich die Dialoge in einem extra Thread zu starten, jedoch schließt sich dieser immer beim Verlassen der DLL und schließt dabei auch irgendwie sofort immer die ganze Anwendung.
    Weis da wer eine Lösung?

    MfG Pellaeon.



  • Wenn du die DLL verlässt ist es normal das sich der Dialog beendet, wie soll er auch da bleiben wenn die DLL nicht mehr geladen ist? 😉

    Was für ne DLL hast du erstellt? Ich habe eine mit MFC-Unterstützung erstellt, darin hat man dann gleich eine von CWinApp abgeleitet Klasse die instanziert wird, und diese existiert solange bis man die DLL entlädt. Nicht Modaler Dialog funktioniert einwandfrei, der Dialog ist dabei ein Member von CMyApp..



  • Ich habe eine Standard-DLL, da ist komischerweise auch ne CWinApp drinnen.^^



  • Also ich habe das jetzt so gemacht, das ich in der DLL einfach nen Work-Thread starte und dieser wiederum einen Dialog modal startet. Das funktioniert auch soweit ganz gut.
    Kann ich nun von außerhalb irgendwie feststellen, wie viele Thread da gestartet wurden und wann einer geschlossen wird?
    Vor allem würd ich gern wissen wie das ist wenn ich das Hauptfenster schließe. Dadurch werden ja alle Threads logischerweise beendet. Werden da die Objekte auch sauber freigegeben? Weil ich hatte im Destruktor in dem Dialog in der DLL ne afxMessageBox(...) und die wurde nicht angezeigt, wenn ich einfach duie Hauptanwendung geschlossen habe.



  • Ne, die werden dann einfach abgewürgt, wenn du dann noch auf Members zugreifst könnteste beim beenden des Programms böse Zugriffsverletzungen bekommen.
    Machst ne Funktion KillThreads oder sowas in der Art und sorgst darin dafür das die Threads vorher beendet werden, Abbruchbedingung setzen und dann auf Threadende warten (ich glaub das ging mit WaitForSingleObject oder sowas). Die erstellte Funktion rufst du aus dem Konstruktor des Hauptprogramms heraus auf.


Anmelden zum Antworten