Hello all,
I'm writing a class with a static function pointer in it, however I'm getting a linker error saying that it is an unresolved external symbol. Here's my code:
BindHook.h
BindHook.cppCode:#ifndef BINDHOOK #define BINDHOOK #include <Windows.h> class BindHook { public: static HHOOK kbHook, msHook; static bool (*onKeyEvent)(int vkey, WPARAM msg); static void InitHooks(); static void StopHooks(); static LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam); static LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam); }; #endif
The specific Error:Code:#include "BindHook.h" bool (BindHook::*onKeyEvent)(int vkey, WPARAM msg) = NULL; HHOOK BindHook::kbHook = 0; HHOOK BindHook::msHook = 0; LRESULT CALLBACK BindHook::KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode != HC_ACTION) return CallNextHookEx(kbHook, nCode, wParam, lParam); //get the struct PKBDLLHOOKSTRUCT kb = (PKBDLLHOOKSTRUCT)lParam; //injected key? bool inj = ((kb->flags & 0x00000010) == 16); //call fn's if ((wParam == WM_KEYDOWN || wParam == WM_KEYUP) && !inj) if (onKeyEvent(kb->vkCode, wParam)) return true; return CallNextHookEx(kbHook, nCode, wParam, lParam); } LRESULT CALLBACK BindHook::MouseProc(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode != HC_ACTION) return CallNextHookEx(msHook, nCode, wParam, lParam); PMSLLHOOKSTRUCT ms = (PMSLLHOOKSTRUCT)lParam; bool inj = ((ms->flags & 0x00000001) == 1); int vk = -1; //determine VKEY switch (wParam) { case WM_LBUTTONUP: case WM_LBUTTONDOWN: vk = VK_LBUTTON; break; case WM_RBUTTONUP: case WM_RBUTTONDOWN: vk = VK_LBUTTON; break; case WM_MBUTTONUP: case WM_MBUTTONDOWN: vk = VK_LBUTTON; break; case WM_XBUTTONUP: case WM_XBUTTONDOWN: vk = ((ms->mouseData >> 16 ) & 0xFFFF) == 1 ? VK_XBUTTON1 : VK_XBUTTON2; break; } switch (wParam) { case WM_LBUTTONUP: case WM_RBUTTONUP: case WM_MBUTTONUP: case WM_XBUTTONUP: if (!inj) if(onKeyEvent(vk, WM_KEYUP)) return true; break; case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_MBUTTONDOWN: case WM_XBUTTONDOWN: if (!inj) if(onKeyEvent(vk, WM_KEYDOWN)) return true; break; } return CallNextHookEx(msHook, nCode, wParam, lParam); } void BindHook::InitHooks() { kbHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardProc, NULL, NULL); } void BindHook::StopHooks() { UnhookWindowsHookEx(kbHook); }
Any help would be greatly appreciated.Code:Error 1 error LNK2001: unresolved external symbol "public: static bool (__cdecl* BindHook::onKeyEvent)(int,unsigned int)" (?onKeyEvent@BindHook@@2P6A_NHI@ZA) C:\[...]\BindHook.obj BindSystem_Console
Thanks,
-Matt



LinkBack URL
About LinkBacks



