【发布时间】:2013-07-28 03:19:53
【问题描述】:
是否有详细的权威参考来讨论 32 位和 64 位进程之间的互操作性?根据谷歌搜索,我推断出:
- 32 位 DLL 只能驻留在 32 位进程中,64 位 DLL 只能驻留在 64 位进程中。
- 32 位和 64 位进程只能使用松散耦合的消息系统进行通信,例如网络通信,这意味着它们可以使用 COM/DCOM 进行通信。
- 32 位和 64 位 COM 组件具有不同的注册表项。一个组件通常只在两个世界之一中注册,并且通常只在两个世界之一中可见。
- 如果 32 位进程使用带有 64 位调用标志的 CoCreateInstance,或者(我猜这是可能的吗?)如果 64 -bit 组件以某种方式在 32 位注册表中注册,但在后台仍然创建为进程外 64 位进程,或者如果有一个 32 位 shell COM 组件创建 64 位组件然后重定向调用它?
这表明: 1. 32 位应用程序无法使用 GetObject 获取正在运行的 64 位版本的 Excel?或者可以吗? 32 位与 64 位问题对运行对象表 (ROT) 有何影响?如果只安装了 64 位版本的 Office,32 位进程能否创建 Excel 实例?我认为答案是“否”,除非 32 位进程在其 CoCreateInstance 调用中使用 64 位标志,或者 Excel 也以某种方式在 32 位世界中注册了自己?
Microsoft 是否会自动执行任何操作,例如让 32 位进程中的 CoCreateInstance 检查 64 位注册表并在 32 位注册表中没有注册的情况下尝试创建进程外 64 位组件?我看到了一些来自 64 位 Office 的发行说明,其中 Microsoft 警告从 32 位应用程序访问 64 位 Excel 无法正常工作,但我知道有一个实例似乎可以正常工作。
这方面有很好的技术事实参考吗?
【问题讨论】: