gpt4 book ai didi

c++ - 函数在类中不起作用 - 函数调用缺少参数列表

转载 作者:行者123 更新时间:2023-11-28 07:45:55 24 4
gpt4 key购买 nike

我已经构建了一个可用的键盘记录器,现在我想将它移到类中,这样我就可以随时重复使用它,甚至可以在不同的语言(如 c#)上使用它,但是我遇到了错误,因为相同的代码在类中不起作用。

main.cpp(工作)

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);

void main()
{
HINSTANCE h_instance = GetModuleHandle(NULL);
SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, h_instance, 0); // Works here
}

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
// Populate typedChars
return NULL;
}

KeyboardHook.cpp(不工作)

class KeyboardHook
{
stringstream typedChars;

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
// Populate typedChars
return NULL;
}

KeyboardHook()
{
HINSTANCE h_instance = GetModuleHandle(NULL);
SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, h_instance, 0); // Does not work
}

public:
std::string Get()
{
return typedChars.str();
}

void Clear()
{
typedChars.str(std::string());
typedChars.clear();
}
};

错误

C3867: 'KeyboardHook::KeyboardProc': function call missing argument list; use '&KeyboardHook::KeyboardProc' to create a pointer to member

所以我将其修改为 SetWindowsHookEx(WH_KEYBOARD_LL, &KeyboardProc, h_instance, 0); 现在出现了不同的错误

C2276: '&' : illegal operation on bound member function expression

我也试过但没有成功:

SetWindowsHookEx(WH_KEYBOARD_LL, (LRESULT)&KeyboardProc, h_instance, 0);
SetWindowsHookEx(WH_KEYBOARD_LL, (LRESULT)KeyboardProc, h_instance, 0);
SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHook::KeyboardProc, h_instance, 0);
SetWindowsHookEx(WH_KEYBOARD_LL, &KeyboardHook::KeyboardProc, h_instance, 0);

最佳答案

假设 SetWindowsHookEx 应该采用函数指针(我永远无法理解 horrible Windows API documentation ),您需要将指向成员函数的指针绑定(bind)到应该调用它的对象。如果你想将它绑定(bind)到 this 指向的对象(即你当时创建的 KeyboardHook 对象),试试这个:

using std::placeholders;
SetWindowsHookEx(WH_KEYBOARD_LL,
std::bind(&KeyboardHook::KeyboardProc, this, _1, _2, _3),
h_instance, 0);

或者,KeyboardProc 可以声明为静态成员函数,但这意味着它不能使用 typedChars 成员。

关于c++ - 函数在类中不起作用 - 函数调用缺少参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14884247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com