我们在 2 个应用程序之间有一个自动化场景(主要是 MSUIA),目标是 32 位,我的应用程序(自动化应用程序)是 64 位,在 64 位 win7 上。一些需要共享的信息必须通过 direkt Win SDK 调用(如 SendMessage、GetFocus 等)来访问。
根据我现在的理解,Win64 和 32 子系统是完全独立的,因此任何此类交互都应该立即失败(例如尝试通过 64 位应用程序访问 32 位应用程序的某些部分)。奇怪的是,大多数东西似乎都可以正常工作。所以似乎有某种编组/内部的任何东西。
不过,我现在遇到了一些情况,我定义 p/invoke 函数的方式似乎存在问题。我已经宣布它们是“官方的 MS 方式”,只要有东西可能改变大小(也使用很棒的http://www.pinvoke.net/default.aspx/站点),所以我强制我的 .net 应用程序成为64 位(使用编译开关),它们应该使用 64 位版本的 dll 编译为 64 位。
现在奇怪的是,当使用这些调用访问 32 位应用程序时(例如 GetWindowText,它实际上从另一个进程的内存中读取)这些调用似乎工作正常。但。随后的 MSUIA 调用似乎随机失败。
如果我(错误地)为 p/invoke 调用声明了 32 位签名,即使编译为 64 位,一切都运行良好。
对我来说,这没有任何意义。
最干净的解决方案可能是将我的应用程序也编译为 32 位(或与目标应用程序相同),但仍然......我将不胜感激任何对此的见解。