Welche Nachricht wenn Dialog geschlossen wird
-
Kannst Du nichts dagegen tun, wenn der Thread beendet wird.
Nein
Du kannst das in Deiner DLL allerdings in DllMain mitbekommen.
Und wie?
Den Dialog habe ich in InitInstance mit
m_dialog = new MyDialog(); m_dialog->Create(IDD_DIALOG_MY);
angelegt. Dazu habe ich dann den Handle abgespeichert. Und über diesen Zeige ich den Dialog an.
Nachdem der Dialog aber an der besagten Stelle geschlossen wurde. Habe ich zwar das Handle noch. Aber der Dialog lässt sich darüber nicht mehr starten. Weil der Dialog zerstört wurde.
-
Dann würde ich mal sagen, dass Dein Ansatz falsch ist den Dialog dort zu öffnen wo die DLL geladen wird...
-
Dann würde ich mal sagen, dass Dein Ansatz falsch ist den Dialog dort zu öffnen wo die DLL geladen wird...
Mein Dialog wird dort nicht geöffnet sondern nur erzeugt. Wann soll ich ihn den sonst erzeugen? Der soll verfügbar sein nachdem die DLL geladen wurde.
Du kannst das in Deiner DLL allerdings in DllMain mitbekommen.
Nochmals wie?
-
Was meinst Du mit erzeugt? Nur das Objekt oder auch das Fenster?
Bzgl. Threadende lies doch enfach die Doku zu DllMain!
Da steht doch alles.
http://msdn.microsoft.com/en-us/library/ms682583(VS.85).aspxDLL_THREAD_DETACH
3 A thread is exiting cleanly. If the DLL has stored a pointer to allocated memory in a TLS slot, it should use this opportunity to free the memory. The system calls the entry-point function of all currently loaded DLLs with this value. The call is made in the context of the exiting thread.
-
Was meinst Du mit erzeugt? Nur das Objekt oder auch das Fenster?
Beides!
-
Das mit der DLLMain ist doch aber dasselbe wie ExitInstance.
DLLMain wird laut Hilfe 2 mal aufgerufen beim Laden und Entladen der DLL.Es gibt ja aber auch InitInstance und ExitInstance. Die jeweils beim start oder beenden der DLL aufgerufen werden. Problem bei mir ist aber dass die DLL gar nicht entladen wird.
-
Du irrst DllMain wird für jeden Thread aufgerufen, der startet und stribt wenn die DLL im Prozessraum ist.
Lies doch bitte die Doku!Das die MFC für zwei spezielle Init- und ExitInstance draus macht ist ja wieder wasanderes.
-
Warum klappt eigentlich nie was auf das erste mal. Und ich muss dann immer wegen jeder Kleinigkeit nachfragen.
Ich habe jetzt einfach mal die Funktion so implementiert:
BOOL WINAPI DllMain( __in HINSTANCE hinstDLL, __in DWORD fdwReason, __in LPVOID lpvReserved ) { AfxMessageBox("DllMain"); return TRUE; }
Und erhalte nun einen Linkerfehler:
error LNK2005: _DllMain@12 ist bereits in nafxcwd.lib(dllmodul.obj) definiert.
was mache ich den nun schon wieder falsch?
-
Wenn Du die MFC verwendest, dann hast Du keinen Zugriff direkt auf die DllMain.
Siehe auch:
http://support.microsoft.com/kb/148791/en-us
HTH
-
Wenn Du die MFC verwendest,
Na klar verwende ich die MFC. Sonst wäre ich ja in einem anderen Forum.
dann hast Du keinen Zugriff direkt auf die DllMain.
Na super.