Dialog in der DLL anlegen


  • Mod

    Ist doch alles schon gesagt!

    😋 Schreibe zwei Funktionen.
    - CreateDialogInDLL
    - DestroyDialogInDLL
    Diese lässt Du von der EXE aus einem Thread heraus ausführen.

    MFC InitInstance und ExitInstance verbieten sich. Kann aber dennoch funktionieren. InitInstance und ExitInstance unterliegen eben den Restriktionen der jede DllMain Nutzung unterliegt.
    Und besonders weil ExitInstance aus einem beliebigen anderen Thread aufgerufen werden könnte (nicht muss).

    Wenn Du keinerlei Kontrolle über den Aufruf aus unterschiedlichen Thread hast, könntest Du einen eigenen UI Thread erzeugen, der durch separate Nachrichten (DllFunktionen) die entsprechenden Operationen ausführt.

    Aber nochmal: Du hast keine Chance für eine saubere Terminierng wenn einfach nur der Prozess beendet wird und der Prozess Dir darüber nichts mitteilt... Dann wird Deine DLL Entladen und das war es.



  • Hallo Martin.

    Also danke nochmal für deine Antwort. Allerdings ist noch nicht alles gesagt. Da ich auf meine letzte Frage keine Antwort erhalten habe. Es ist mir leider nicht möglich die weiteren Funktionen aufrufen zu lassen zumindest die Funktion DestroyDialogInDLL nicht. Wie du ja im anderen Beitrag lessen kannst.

    Und zum Test habe ich mal die besagte Funktion in Exitinstance meiner MFC TestExe aufgerufen da hatte ich aber das selbe Problem. Wann soll ich die Funktion sonst aufrufen wenn nicht da. Kann ja nicht vom Benutzer erwarten, dass er vorher einen Button drückt bevor er den Dialog schliesst.

    ...könntest Du einen eigenen UI Thread erzeugen,

    genau das war ja mein zweiter Ansatz den ich ja auch beschrieben habe. Aber der funktioniert auch nicht aus dem genannten Grund.


  • Mod

    Poste mir bitte noch mal das Beispiel in dieser Variante.
    Ich schau es mir nochmal an.

    Ansonsten: Wenn Du keinerlei Kontrolle hast wann undwie die DLLs aufgerufen werden, dann das Problem mit modalen Dialogen so nicht zu lösen. Schon gar nicht das saubere Aufräumen.

    Was sagt denn der Hersteller? Hier geht es doch um die Integration in ein Fremdprodukt... oder?
    Der muss sich doch was dabei gedacht haben! Oder hoffen wir mal, dass er sich was dabei gedacht hat 😉



  • Poste mir bitte noch mal das Beispiel in dieser Variante

    In welcher Variante. In der mit DestroyDialogInDLL in ExitInstance der Exe. Oder die Varinate mit dem Userinterface Thread?



  • @Martin

    Also es hat definitiv nichts mit ExitInstance zu tun. Ich habe nun die Funktion "DestroyDialogInDLL" in der ich Nachrichten an die Dialoge sende in einem extra Button aufgerufen. Und ich erhalte genau das selbe Problem. Nach dem Senden der ersten Nachricht und dem aufruf von DestroyWindow im ersten Dialog werden nacheinander PostNCDestroy der anderen Dialoge aufgerufen. Die weiteren Nachrichten werden dann ignoeriert, da ja dann kein Dialog mehr vorhanden ist.

    Folge Speicherlöcher. Ich kann dir den Code meines kleinen Beispiels nochmals hochladen. Allerdings erst heute Abend da ich hier in der Firma nicht darf.


  • Mod

    Lade hoch was Du denkst, was ich anschauen soll. Ich komme auch erst frühestens heute Abend dazu mir fremden Code anzusehen...

    Aber evtl. solltest Du das Problem nochmal detailiert eingrenzen.
    Damit alle Rahmenbedingungen klar sind. Evtl. findet sich ja ein anderer Ansatz. z.B. Externer COM-Server etc.



  • Ok werde den Code heute Abend hochladen.

    Aber evtl. solltest Du das Problem nochmal detailiert eingrenzen.

    Ja genau deshalb habe ich den neuen Beitrag hier aufgemacht. Und genau beschrieben was ich will. Oder noch was unklar oder unverständlich?



  • So also nun endlich.

    Hier der Link.

    http://www.file-upload.net/download-2157773/Dialogtest_Version2.zip.html

    Nun bin ich genau so vorgegangen wie du gemeint hast Martin.



  • Hallo Martin Richter. Hast du dir den Code nun mal angesehen?



  • Ha hier werden Sie geholfen. Super.



  • letzter Versuch. Könnte sich das jemand nochmal ansehen.


Anmelden zum Antworten