【发布时间】:2023-03-30 20:23:01
【问题描述】:
一般来说,每当我们想在 C++ 对象中包装一个窗口/线程时,我们通过通过SetWindowLong/GetWindowLong 或SetProp/GetProp 传递this 指针来实现窗口,并作为lpParameter 传递CreateThread /等等。
我的问题是针对 Hooks 的。 将“this”指针传递给 SetWindowsHookEx 的回调过程的优雅方法是什么,或者换句话说如何包装钩子的回调过程?
由于 SetWindowsHookEx 不接受任何 UserData 参数,因此除了使用未封装的即全局/静态/TLS 数据之外,我没有看到太多选择。
【问题讨论】:
-
@RogerLipscombe - 感谢您的链接。我已经看到了,它谈到了使用静态,我已经知道/已经做过很多次了。但从未觉得它令人满意。
-
这并不令人满意,但这是“标准”的方式。如果你做其他事情,那可能会令人惊讶。
-
@RogerLipscombe 你是说使用@ybungalobill 提到的
Thunks可能令人惊讶吗?我想敞开心扉,学习新的更好的方法来做同样的事情。 -
我的意思是:如果您正在编写一个框架(例如 ATL),那么使用 thunk 可能是正确的答案。如果您正在编写应用程序,那么更喜欢简单(但不是“优雅”)的解决方案。