wm_quit und dll und threads
-
ich will eine dll erstellen welche diesen code enthält
#define WINEXPORT extern "C" __declspec (dllexport) WINEXPORT main(){ MSG msg; char szMsg[40]; while (TRUE) { // check the message queue if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) // exit main loop on WM_QUIT { wsprintf( szMsg, "MHHHH!!!!!!" ); MessageBox( NULL, szMsg, "main", MB_OK ); } TranslateMessage(&msg); DispatchMessage(&msg); } // main program logic goes here } // perform any shutdown functions here - releasing objects and such //return(msg.wparam); // return exit code to Windows }
wenn ich diese dll nun als eigen thread lade, und dann auf das grosse X klicke müsste doch eine messagebox aufpopen oder ????
aber es geht nicht warum ???
-
weil WM_QUIT nie in der message-loop "ankommt"
zitat MSDN:
This message does not have a return value, because it causes the message loop to terminate before the message is sent to the application's window procedure.
rocknix ///
-
das verstehe ich nicht , wie soll ich es dann machen ??
-
mir ist nicht ganz klar, was du vorhast, aber mir scheint, deine DLL hat eine fensterprozedur, die in einem thread neben dem hauptprogramm läuft. hast du ein eigenes fenster in der dll erzeugt ?
falls ja, hier ein weg. bastel dir 2 wrapper-funktionen für createWin/deleteWiIn. wenn das fenster/die anwendung geschlossen wird, rufst du deleteWin() auf. von hier schickst du eine user-defined message, die du in der loop abfängst.
hoffe, ich habe dein problem richtig interpretiert.
RockNix ///
-
ich ferstehe nicht wieso der code den ich dir gepostet habe so nicht gehen soll
überall (www.google.de wm_quit peekmessage)
z.b http://www.cprogramming.com/tutorial/gl4.html
finde ich diese code, also muss der ja wohl gehen oder ???ich weis nur den namen und die funktion die die anwendung lädt, denn ich habe die sourcen nicht dafür. alles einwenig kompliziert.
gibt es irgendeine möglich keit in eine dll die als eigener thread läuft einen code ein zubinden der beim beenden der applikation noch eine funktion aufführt ???danke würde mir sher helfen
-
Also ich weiß auch nicht so ganz, was du hier machst! Klar die Main-Loop ist so schon richtig, in der exe selbst (zumindest bei einer nicht Konsolen-Anwendung). Bei dlls kenne ich nur die DllMain. Da gibt es ein DLL_PROCESS_DETACH - vielleicht hilft dir das
Wie kann man denn eine Dll als eigenen Thread laufen lassen
-
Wie kann man denn eine Dll als eigenen Thread laufen lassen
ich bin ja neu im dll geschäft aber, ich habe einfach eine externe dll erstellt(nennt man das so ?), und dann eben mit createthread einen thread erzeugt der die
dll lädt und die dllmain() aufruft
-
DllMain wird schon vom System aufgerufen, wenn du die Dll lädest bzw. wenn sie wieder entladen wird. (Evtl. kann man das in gewisser Weise auch mit Konstruktor und Destruktor einer Klasse vergleichen
)