Static function pointer linker error
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
Code:
#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
BindHook.cpp
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);
}
The specific Error:
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
Any help would be greatly appreciated.
Thanks,
-Matt