如何将 class 实例传递给 LowLevelMouseProc?

How to pass class instance to LowLevelMouseProc?

我正在实施处理全局鼠标点击的逻辑,但我卡在需要从 LowLevelMouseProc 获取数据的时刻。目前,我在创建 MyClass 实例时设置全局变量,并且我能够从 LowLevelMouseProc 访问它,但我认为这不是正确的方法。

设置挂钩:

g_myClass = this;
SetWindowsHookEx(WH_MOUSE_LL, MyClass::MouseHookProc, LoadLibraryA("user32.dll"), 0);

LowLevelMouseProc:

LRESULT CALLBACK MyClass::MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam) {
    MOUSEHOOKSTRUCT * pMouseStruct = (MOUSEHOOKSTRUCT *)lParam;
    g_myClass.onClick(wParam, pMouseStruct->pt.x, pMouseStruct->pt.y); //isn't good
}

低级鼠标挂钩不提供检索实例指针的机制。使用全局变量通常是最好的选择。

如果您不能使您的程序以这种方式运行,您将需要使用 thunk。该技术已在许多地方进行过讨论,网络搜索将提供更多详细信息。例如,我的粗略搜索产生了这个:http://zabkat.com/blog/hook-callback-thunk-x64.htm