我正在调试一个 32 位端口到 64 位平台。有一个错误导致其中一个窗口仅在 64 位版本上无法正确响应消息。所以我并排运行它们并尝试在它们上使用 Spy++。
事实证明,您不能在 64 位应用程序上使用 Spy++ 32,反之亦然。事实证明,您不能同时运行 Spy++ 32 位和 64 位版本。
这是怎么回事,我该如何解决这个问题。是否有可以拦截 32 位和 64 位版本的消息的等价物?
Spy 使用消息挂钩来拦截消息。消息挂钩必须在 DLL 中,并且不能将 32 位 DLL 加载到 64 位进程中(反之亦然)。至于不能同时运行两个版本,我怀疑是因为钩子DLL使用相同的方法发送到应用程序,所以你只能运行一个应用程序。
实现单个拦截器将非常困难,原因有两个:
SetWindowsHookEx
不允许 32 位应用程序在 64 位进程中设置挂钩(反之亦然),因此您需要两个 exe(和两个 DLL)来实现这一点,以及一些 IPC 机制来将结果传达给公共主持人;