freeLibrary macht mein programm kaputt
-
ne, da bin ich mir ziemlich sicher:
long windowProc(HWND hwnd,unsigned int message,unsigned int wParam,unsigned int lParam){ //... static HMODULE windowHookDll; switch (message){ case WM_CREATE: { windowHookDll=LoadLibrary("WindowHook.dll"); if(!windowHookDll){ //... return true; } //paar funktionen laden } break; //... case WM_DESTROY: { uninstallWindowHook(); FreeLibrary(windowHookDll); PostQuitMessage(0); } }könnte natürlich sein, dass durch irgendwelche strahlung die bits alle auf magische weise umspringen

//edit fehler beim kopieren
//edit2 wieder zuviel bzw zuwenig rausgeschnitten-.-
-
Wie und wo ist sie denn definiert? Ist sie ungleich null vor dem aufruf von FreeLibrary?
-
oben steht der code(ich hasse meine müdigkeit, immer wien spaten falsch kopiert-.-)
-
Mal GetLastError probiert? Vielleicht irgendein Fehler in der DllMain, die ja bei FreeLibrary aufgerufen wird, wenn der Referenzzähler wieder 0 ist?
-
wenn return true in der dllmain ein fehler ist...

-
Hi,
setz doch zu Testzwecken einfach mal nen Sleep(3000) hinter den Aufruf von uninstallWindowHook und schau ob du dann noch den Fehler hast.MfG Spacelord
-
keine änderung...
kann es sein, dass es vielleicht zufälligerweise an meiner hook funktion selber liegt?
-
dort steht aber doch nix aufregendes drin nur UnhookWindowsHookEx() und solche scherze. oder meinst du die hook proc an sich. wenn ja zeig sie halt mal.
SirLant schrieb:
Bei dir ist es zwar überflüssig zu fragen, aber du bist dir ganz sicher, dass windowHookDll auch wirklich ein handle auf deine hook-dll ist?
so wirklich hast du diese frage noch nicht beantwortet. ist der wert bei wm_destroy noch gültig bzw. der selbe wie in wm_create.
-
Warum machst du denn nicht mal zum Test eine minimale Hook-Proc?
-
fehler gelöst

an windowHookDll lags nicht, der wert bleibt auch die ganze zeit über der gleiche.
es lag wie ich vermutet hab, and er proc, und zwar subclassed die immer das aktive fenster, und ich hab versucht den hook zu killen, als noch ein paar fenster subclassed waren

falls es immer noch interessiert, hier die funktion, stilistisch bin ich aber nicht sehr stolz drauf^^
//messageTarget ist eine globale variable mit dem HWND des Zielfensters, welches die nachrichten erhalten soll LRESULT CALLBACK hookProc(int nCode,WPARAM wParam,LPARAM lParam){ //das aktuelle gesubclasste window static HWND subclassedWindow=0; //die nachricht CWPRETSTRUCT* message=(CWPRETSTRUCT*)lParam; //ist der hook deaktiviert, aussteigen if(!messageTarget){ if(subclassedWindow){ removeSubclass(subclassedWindow); } return CallNextHookEx (hook, nCode, wParam, lParam); } //das zielfenster darf nicht gehookt werden if(message->hwnd==messageTarget){ return CallNextHookEx (hook, nCode, wParam, lParam); } //sonst nachricht testen if(nCode==HC_ACTION&&message->message==WM_ACTIVATE){ if(LOWORD(message->wParam)==WA_CLICKACTIVE||LOWORD(message->wParam)==WA_ACTIVE){ //erst aufräumen if(subclassedWindow){ removeSubclass(subclassedWindow); } subclassedWindow=message->hwnd; subclass(subclassedWindow,messageTarget); } else { //fenster wird inaktiv:subclass entfernen removeSubclass(subclassedWindow); subclassedWindow=0; } } return CallNextHookEx (hook, nCode, wParam, lParam); }