Fenster aus DLL



  • hallo,
    hab ein fenster aus DLL heraus erzeugt und zwar genau bei DLL_PROCESS_ATTACH
    habe ich das fenster erzeugt. In DLL habe ich auch noch Exportfunktionen movewindow, diese soll das fenster bewegen, aber leider bleibt der ganze prozess bei fenster schleife stehen, funktionen in DLL können so nicht aufgerufen werden.
    wie kann ich ein fenster erzeugen und gleichzeitig funktionen aufrufen, die auf das fenster wirken sollen?



  • du könntest das Fenster bzw. die Schleife in einen Thread setzen



  • gute idee. probier ich mal, danke, werde mich wieder melden, wenn's nicht klappt


  • Mod

    Aus DLL_PROCESS_ATTACH sollten in keinem Fall komplexere UI Funktionen ausgeführt werden.
    1. Eine DLLMain ist nicht reentrant.
    2. Kannst Du beim laden Deiner DLL nicht davon ausgehen, das die User32.DLL bereits initialisiert ist.
    3. Ein Neuer Thread ist wohl hier der größte Unfug. Man kann aus Dllmain keinen neuen Thread starten. Das führt unweigerlich zu einem Deadlock (siehe 1.)



  • Martin Richter schrieb:

    Aus DLL_PROCESS_ATTACH sollten in keinem Fall komplexere UI Funktionen ausgeführt werden.
    1. Eine DLLMain ist nicht reentrant.
    2. Kannst Du beim laden Deiner DLL nicht davon ausgehen, das die User32.DLL bereits initialisiert ist.
    3. Ein Neuer Thread ist wohl hier der größte Unfug. Man kann aus Dllmain keinen neuen Thread starten. Das führt unweigerlich zu einem Deadlock (siehe 1.)

    hast wohl recht. hast vielleicht eine bessere vorschlag für mein vorhaben.
    also, ein fenster aus dll erzeugen, und dieses per funktionen, in dll integriert sind, zu steuern.

    ist zustand
    1.fenster erzeugt
    2.die funktion fenstererzeugung in einer thread gepackt.

    gestartet, fenster zwar kurz zusehen, dann leider dll entladen.



  • Eine DLL hat normalerweise kein eigenes Fenster. Man kann dieses aber problemlos einrichten und der aufrufenden Applikation mitteilen. Vorschlag: Richte eine DLL-Funktion mit der Übergabe der HWND der Applikation ein und teile dann mit SendMessage aus der DLL der Applikation das HWND des eingerichteten DLL-Fensters mit. Das geht so sicher, aber vielleicht auch einfacher?
    Diese Frage wurde hier im Forum schon mehrfach kontrovers diskutiert.


  • Mod

    1. Ein Fenster gehört zu dem Thread in dem es erzeugt wurde. Man kann Fensterfunktion und Message Queue nicht in unterschiedliche Threads packen.
    2. Du kannst ein fenster in jeder beliebigigen Funktion einer DLL erzeugen.
    3. Wie Bernie es schon schreib: Ein Fenster gehört zu einem Prozess und in dem Prozess wieder zu einem Thread! Ob DLL oder EXE das Fenster erzeugt ist wurscht.


Anmelden zum Antworten