#include "Utils.h"\r
#include "Commands.h"\r
#include "CmdTable.h"\r
+#include "TLS.h"\r
#include "../xkeymacs/resource.h"\r
#include <math.h>\r
#include <Imm.h>\r
static AFX_EXTENSION_MODULE XkeymacsdllDLL = { NULL, NULL };\r
\r
static HINSTANCE g_hDllInst = NULL;\r
-static DWORD g_TlsIndex = 0;\r
\r
extern "C" int APIENTRY\r
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)\r
{\r
g_hDllInst = hInstance;\r
- LPVOID lpData;\r
\r
// Remove this if you use lpReserved\r
UNREFERENCED_PARAMETER(lpReserved);\r
e->Delete();\r
// CUtils::Log("DllMain: 'new' threw an exception");\r
}\r
-\r
- if ((g_TlsIndex = TlsAlloc()) == TLS_OUT_OF_INDEXES)\r
+ if (!TLS::Alloc())\r
return FALSE;\r
- // fall through\r
case DLL_THREAD_ATTACH:\r
- if ((lpData = LocalAlloc(LPTR, sizeof(HHOOK))) != NULL)\r
- TlsSetValue(g_TlsIndex, lpData);\r
break;\r
case DLL_PROCESS_DETACH:\r
TRACE0("XKEYMACSDLL.DLL Terminating!\n");\r
// Terminate the library before destructors are called\r
AfxTermExtensionModule(XkeymacsdllDLL);\r
CXkeymacsDll::ReleaseKeyboardHook();\r
- if ((lpData = TlsGetValue(g_TlsIndex)) != NULL)\r
- LocalFree(lpData);\r
- TlsFree(g_TlsIndex);\r
+ TLS::Free();\r
break;\r
case DLL_THREAD_DETACH:\r
CXkeymacsDll::ReleaseKeyboardHook();\r
- if ((lpData = TlsGetValue(g_TlsIndex)) != NULL)\r
- LocalFree(lpData);\r
+ TLS::FreeLocal();\r
break;\r
}\r
return 1; // ok\r
\r
void CXkeymacsDll::SetKeyboardHook(DWORD threadId)\r
{\r
- LPVOID lpData = TlsGetValue(g_TlsIndex);\r
- if (!lpData) {\r
- lpData = LocalAlloc(LPTR, sizeof(HHOOK));\r
- if (!lpData)\r
- return;\r
- if (!TlsSetValue(g_TlsIndex, lpData))\r
- return;\r
- }\r
- HHOOK *phHook = reinterpret_cast<HHOOK *>(lpData);\r
- if (!*phHook)\r
- *phHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, g_hDllInst, threadId ? threadId : GetCurrentThreadId());\r
+ if (!TLS::GetKeyboardHook())\r
+ TLS::PutKeyboardHook(SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, g_hDllInst, threadId ? threadId : GetCurrentThreadId()));\r
}\r
\r
inline void unhook(HHOOK &hh)\r
\r
void CXkeymacsDll::ReleaseKeyboardHook()\r
{\r
- HHOOK *phHook = reinterpret_cast<HHOOK *>(TlsGetValue(g_TlsIndex));\r
- if (phHook)\r
- unhook(*phHook);\r
+ HHOOK hook = TLS::GetKeyboardHook();\r
+ if (!hook)\r
+ return;\r
+ UnhookWindowsHookEx(hook);\r
}\r
\r
void CXkeymacsDll::SetHookStateDirect(bool enable)\r