【问题标题】:Spy++ 32 and 64 bit doesn't allow for both to run simultaneously. Why?Spy++ 32 和 64 位不允许两者同时运行。为什么?
【发布时间】:2013-10-02 15:48:57
【问题描述】:

我正在调试一个 32 位端口到 64 位平台。有一个错误导致其中一个窗口仅在 64 位版本上无法正确响应消息。所以我并排运行它们并尝试在它们上使用 Spy++。

事实证明,您不能在 64 位应用程序上使用 Spy++ 32,反之亦然。事实证明,您不能同时运行 Spy++ 32 位和 64 位版本。

这是怎么回事,我该如何解决这个问题。是否有可以拦截 32 位和 64 位版本的消息的等价物?

【问题讨论】:

    标签: winapi messages


    【解决方案1】:

    Spy 使用消息挂钩来拦截消息。消息挂钩必须在 DLL 中,并且不能将 32 位 DLL 加载到 64 位进程中(反之亦然)。至于不能同时运行两个版本,我怀疑是因为钩子DLL使用相同的方法发送到应用程序,所以你只能运行一个应用程序。

    实现单个拦截器将非常困难,原因有两个:

    1. SetWindowsHookEx 不允许 32 位应用程序在 64 位进程中设置挂钩(反之亦然),因此您需要两个 exe(和两个 DLL)来实现这一点,以及一些 IPC 机制来传达结果到一个共同的主机;
    2. 挂钩需要快速(以尽量减少影响),并且大多数 IPC 机制会太慢。

    【讨论】:

    • 也就是说Spy++ 32位和64位使用的DLL是同一个?嗯,这似乎是一个实现错误。
    • @Adrian 不,Spy 对 32 位和 64 位进程使用单独的 DLL。
    • 那么,为什么同时运行两者会出现问题?
    • @Adrian 请参阅第 2 部分。同时运行挂钩不是问题,而是将结果传回主机的问题。
    • 返回主机?所以如果有 2 个应用程序,一个 32 位和一个 64 位,运行钩子,这会失败吗?我觉得这不可能。您有任何文档可以支持吗?
    猜你喜欢
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 2017-10-24
    相关资源
    最近更新 更多