64位Windows上的32位和64位互操作性

时间:2011-01-25 20:39:04

标签: com interop ms-office

是否有一个很好的全面权威参考,讨论了32位和64位进程之间的互操作性?基于谷歌搜索我推断:

  1. 32位DLL只能驻留在32位进程中,而64位DLL只能驻留在64位进程中。
  2. 32位和64位进程只能使用松散耦合的消息系统进行通信,例如网络通信,这意味着它们可以使用COM / DCOM进行通信。
  3. 32位和64位COM组件具有不同的注册表项。组件通常仅在两个组件中的一个中注册,并且通常仅在两个世界中的一个中看到。
  4. 32位进程只能创建一个注册为64位COM组件的东西,如果它使用CoCreateInstance和64位调用标志,或者(我猜这个,有可能吗?)如果64 -bit组件以某种方式在32位注册表中注册,但是仍然创建为进程外的64位进程,或者如果有一个32位shell COM组件创建64位组件然后重定向打电话给它?
  5. 这表明: 1. 32位应用程序无法使用GetObject来获取正在运行的64位版本的Excel?或者可以吗?运行对象表(ROT)如何受到32位与64位问题的影响?如果只安装了64位版本的Office,32位进程是否可以创建Excel实例?我认为答案将是“否”,除非32位进程在其CoCreateInstance调用中使用64位标志,或者Excel是否以某种方式在32位世界中注册了自己?

    Microsoft是否自动执行任何操作,例如从32位进程获取CoCreateInstance检查64位注册表并尝试创建进程外64位组件(如果在32位注册表中没有注册)?我已经看到64位Office的一些发行说明,其中Microsoft警告从32位应用程序访问64位Excel无法正常工作,但我知道有一个实例似乎只是工作。

    对此有一个很好的技术事实参考吗?

1 个答案:

答案 0 :(得分:5)

MSDN Library docs中对CLSCTX进行了很好的解释。很多规则,默认行为是:

  

如果既不是客户端也不是服务器   指定首选项,然后:

     
      
  • 如果承载服务器的计算机运行的是Windows XP或   没有服务的Windows Server 2003   然后安装包1(SP1)或更高版本   COM将更喜欢64位版本的   服务器(如果有);否则它   将激活32位版本的   服务器

  •   
  • 如果承载服务器的计算机正在运行Windows Server 2003   安装SP1或更高版本,然后安装COM   将尝试匹配服务器   建筑给客户   建筑。换句话说,对于一个   32位客户端,COM将激活一个   32位服务器(如果有);除此以外   它将激活64位版本的   服务器。对于64位客户端,COM   将激活64位服务器   可用的;否则会激活   一个32位服务器。

  •   

如果要覆盖此行为,请查看MSDN文章。