I have a class like this
class Keyboard
{
public:
Keyboard(void);
~Keyboard(void);
void SetHook(HINSTANCE hInstance);
LRESULT CALLBACK keyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam);
};
LRESULT CALLBACK Keyboard::keyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
bool bControlKeyDown=0;
bool caps = GetKeyState(VK_CAPITAL) < 0;
...
void Keyboard::SetHook(HINSTANCE hInstance)
{
KeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, Keyboard::keyboardHookProc, hInstance, NULL);
}
But the statement
KeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, Keyboard::keyboardHookProc, hInstance, NULL);
Result in compile error
Error 7 error C3867: 'Keyboard::keyboardHookProc': function call missing argument list; use '&Keyboard::keyboardHookProc' to create a pointer to member
If I change to ‘&Keyboard::keyboardHookProc’ it also error, also when I cast to ‘(HOOKPROC) &Keyboard::keyboardHookProc’ it also error
Anyone please help
This is common mistake for C-callbacks.
Keyboard::keyboardHookProcmust be static.[UPDATE]
You must find some other way to get
Keyboardobject to this static method if you want to operate onKeyboardobject instatic Keyboard::keyboardHookProc. If you have oneKeyboardyou might usesingletonpattern, If not then every static method must have its ownKeyboardobject.[UPDATE2]
One of the way to link object with global function is by template object reference. But this work only for global objects: