Keine Threads in DLLs?



  • Hi,

    Ich hab eine DLL die ich in einem Programm via LoadLibrary lade.

    In dieser DLL ist ein bischen Netzwerkcode und ein Thread.
    Wenn ich den Thread starten will wird er nicht ausgeführt,
    der einzige Inhalt des Threads ist nämlich eine MessageBox , die ich allerdings
    nie zu Gesicht bekomme.

    Das verwunderliche daran ist das der allerselbe Code funktioniert wenn er nicht in der DLL steht.

    Muss ich in beim Coden an einer DLL was beachten oder kann man da ganz einfach keine Threads nutzen?

    Schon mal vielen Dank,
    Xalon



  • Wie startest Du denn den Thread?


  • Mod

    Beachte bitte, dass Du in DllMain keinen Thread starten kannst!



  • Erstmal vielen Dank für die Antworten.

    Aus der DLLMain ruf ich eine Funktion auf,diese ruft wiederrum eine Funktion auf
    welche dann den Thread startet:

    CreateThread (NULL, 0, telnet_connect,&dwThreadParam, 0,&telnetthread);
    
    //...
    
    DWORD WINAPI telnet_connect( LPVOID pvoid )
    {
    //...
    }
    

    @Martin Richter: Aber aus Unterfunktionen schon,oder?

    Schon mal Danke,
    Xalon



  • Nein, aus Unterfunktionen auch nicht!?!
    (wie kann man nur denken es würde nen Unterschied machen *wunder*)


  • Mod

    @hustbaer: Außer er meint aus einer separaten Funktion die man in der DLL aufruft.
    Aber dann hat er sich reichlich komisch ausgedrückt... 🙂



  • Ähm ich meinte wenn ich aus der DLL eine Funktion aufrufe,ob die dann einen Thread
    starten kann. Scheinbar ja nicht.

    Gibt es irgendeine Lösung für das Problem?

    Schon mal Danke,
    Xalon


  • Mod

    Wenn diese Funktion nicht im Kontext von einer DllMain Funktion erfolgt dann ist das möglich.



  • @Xalon_:
    Du kannst deinen Thread auch in DllMain starten, bloss nicht mit den meisten Frameworks, ganz einfach deswegen weil du nicht darauf warten kannst dass der Thread wirklich losläuft (das tut er nicht solange DllMain nicht fertig abgearbeitet ist), und die meisten Frameworks warten aus dem einen oder anderen Grund darauf dass der Thread losgelaufen ist.

    Ansonsten, solltest du wirklich eine Unterfunktion meinen die NICHT von DllMain aus aufgerufen wird sondern NACHDEM DllMain fertig ist, dann sollte es garkeine Probleme geben und die Ursache für den Fehler liegt irgendwo anders.



  • Ok Danke habt mir sehr geholfen 🙂



  • Martin Richter schrieb:

    Beachte bitte, dass Du in DllMain keinen Thread starten kannst!

    Warum geht das nicht ?



  • *push* ?! 🙄



  • Mich würde es wirklcih auch interessieren warum man das nicht machen darf ... wenn ich in einer WinMain/main einen Thread starten darf, warum dann nicht auch in einer DllMain?



  • Du kannst in der DllMain beliebig viele Threads starten :
    http://msdn2.microsoft.com/en-us/library/ms682453.aspx

    CreateThread () schrieb:

    During process startup and DLL initialization routines, new threads can be created, but they do not begin execution until DLL initialization is done for the process.


Log in to reply