![](/img/trans.png)
[英]How do I safely pass objects, especially STL objects, to and from a DLL?
[英]How do I safely hook into the message pump from a DLL?
我正在尝试从加载DLL的进程中获取消息。
我试过了:
SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)WndProc, hInstance, 0);
这给了我关于“由于缺少系统Y.dll而无法启动程序X”的错误弹出窗口。 这就是我在标题中“安全”放置的原因。
我也尝试过:
SetWindowsHookEx(WH_CALLWNDPROC, (HOOKPROC)WndProc, hInstance, threadId);
其中threadId
是DLLMain中GetCurrentThreadId()
的结果。 这个可以工作,但是我没有收到窗口的任何消息(只有一堆512和1025)。
消息与线程和窗口相关,您的DLL可能由进程加载。 因此,没有直接的对应关系。
另一方面,钩子是全局的或每个线程的。
总之,这意味着您必须选择是只从特定线程中获取消息,还是从全局(特定桌面中所有进程中的所有线程)中获取消息,以便自己过滤出自己感兴趣的进程。
您的第二个代码段是一个线程钩子。 第一个是全局挂钩,您肯定在其中做错了什么,因为成功的挂钩本身不会引起您提到的错误消息。
我猜您正在直接从DLLMain内部调用这些函数。 可以从DLLMain安全调用的函数受到严重限制,有关此信息,请参阅DLLMain上的MSDN文档 。
没有显式的安全和不安全函数列表,但是似乎您的第一个代码片段中对SetWindowsHookEx的调用正在执行DLLMain函数中禁止的操作,因此DLL无法正确加载。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.