void Mouseover::End() { if ((fSpyDLL!=0)&&(fSpyDLL!=(HINSTANCE)-1)) { stop(); FreeLibrary(fSpyDLL); } DestroyWindow(GlobalData->ServerWND); Thtypes_End(); }
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ , DWORD reason /* Reason this function is being called. */ , LPVOID reserved /* Not used. */ ) { switch (reason) { case DLL_PROCESS_ATTACH: g_hInstance = hInst; ourProcessID = GetCurrentProcessId(); if(hSynhroMutex==0) { hSynhroMutex = CreateMutex(NULL, FALSE, "GoldenDictTextOutSpyMutex"); if(hSynhroMutex==0) { return(FALSE); } } ThTypes_Init(); uGdAskMessage = RegisterWindowMessage(GD_MESSAGE_NAME); FindGetPhysicalCursorPos(); break; case DLL_PROCESS_DETACH: // if(hSynhroMutex) WaitForSingleObject(hSynhroMutex, INFINITE); if(hSynhroMutex) WaitForSingleObject(hSynhroMutex, 2000); if (TimerID) { KillTimer(0, TimerID); TimerID=0; } if(hSynhroMutex) { ReleaseMutex(hSynhroMutex); CloseHandle(hSynhroMutex); hSynhroMutex=0; } { MSG msg ; while (PeekMessage (&msg, 0, WM_TIMER, WM_TIMER, PM_REMOVE)); } if ((hGetWordLib != 0)&&(hGetWordLib != (HINSTANCE)(-1))) { FreeLibrary(hGetWordLib); } Thtypes_End(); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } /* Returns TRUE on success, FALSE on failure */ return TRUE; }
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ , DWORD reason /* Reason this function is being called. */ , LPVOID reserved /* Not used. */ ) { switch (reason) { case DLL_PROCESS_ATTACH: g_hInstance = hInst; hSynhroMutex = CreateMutex(NULL, FALSE, "GoldenDictTextOutSpyMutex"); ThTypes_Init(); break; case DLL_PROCESS_DETACH: WaitForSingleObject(hSynhroMutex, INFINITE); if (GlobalData->TimerID) { if (KillTimer(0, GlobalData->TimerID)) GlobalData->TimerID=0; } ReleaseMutex(hSynhroMutex); CloseHandle(hSynhroMutex); { MSG msg ; while (PeekMessage (&msg, 0, WM_TIMER, WM_TIMER, PM_REMOVE)) {} } if ((hGetWordLib != 0)&&(hGetWordLib != (HINSTANCE)(-1))) { FreeLibrary(hGetWordLib); } Thtypes_End(); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } /* Returns TRUE on success, FALSE on failure */ return TRUE; }
/** ** The unload routine. ** Called when your plug-in is being unloaded when the application quits. ** Use this routine to release any system resources you may have ** allocated. ** ** Returning false will cause an alert to display that unloading failed. ** @return true to indicate the plug-in unloaded. */ ACCB1 ASBool ACCB2 PluginUnload(void) { CleanUpUI(); Thtypes_End(); return true; }