我的32位和64位COM组件可以共存在同一台机器上吗?

时间:2009-07-09 16:33:11

标签: com dll 64-bit

我有一个主要由ASP使用的32位COM组件,我们也有64位版本。

64位版本功能相同,它也使用相同的ProgID(据我所知,同样的CLSID等)。

我可以在与32位版本相同的机器上安装/ regsvr 64位版本(显然在不同的文件夹中)并让我现有的32位应用程序继续使用32位组件,而我的64位应用程序使用64位版本?

这些是用C ++而不是.NET编写的本机代码组件。

1 个答案:

答案 0 :(得分:7)

这应该是可能的。

在64位窗口上,registryfile system被重定向到32位应用程序。注册32位COM dll将位于注册表中的单独位置(HKLM \ Software \ Wow6432Node \ Classes),并且您的COM组件应位于单独的文件夹中,64位位于Program Files下,32位位于Program Files下(86)。 32位应用程序的注册表/文件重定向应该可以透明地工作。

组件本身可能会阻止这种情况 - 例如,如果它创建的全局资源会阻止32位和64位版本之间的冲突。

这种情况已经存在于64位Windows上。在我的64位系统上,我有:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Classes \ CLSID {8856F961-340A-11D0-A96B-00C04FD705A2} \ InProcServer32 \ Default = C:\ Windows \ SysWow64 \ ieframe.dll

HKEY_CLASSES_ROOT \ CLSID {8856F961-340A-11D0-A96B-00C04FD705A2} \ InProcServer32 \ Default = C:\ Windows \ System32 \ ieframe.dll

同一系统上的32位和64位版本的WebBrowser控件。