我有一个x64服务器,因为我的库编译为AnyCPU,在x64下运行.我们需要访问在x86下注册的COM组件.我不太了解COM,我的谷歌搜索让我无处可去.
问题:对于COM组件,我可以使用从x64到x86的符号注册表链接吗?我是否还需要在x64下注册COM组件?我可以(这里的任何陈述......)?
谢谢.
如果组件正在运行x64-native,则它无法在进程中加载32位COM服务器,因为它是错误的进程.有几种解决方案可能:
如果可以的话,构建一个64位版本的COM代码(当然可以在64位注册表中注册).这是最干净的解决方案,但如果您没有COM服务器的代码,则可能无法实现.
将.NET组件作为32位x86而不是x64运行.我假设你已经考虑过并且因为某种原因拒绝了这个.
使用COM代理 DLLhost.exe 在进程外托管COM组件.这将使调用COM服务器的速度变慢得多(它们现在将是进程间的Windows消息而不是本机函数调用),但在其他方面是透明的(您不必做任何特殊的事情).
如果服务器需要自定义代理存根而不是使用普通的oleaut32(非常罕见),这可能不是一个选项,因为不会有64位版本的代理可用.只要它可以使用普通的OLE编组,您只需注册它以进行代理激活.
我找到了这个解决方案,在64位Windows中处理传统的32位组件,请参阅文章:
•将项目类型从进程内转换为进程外
•使用COM +作为主机(这对我有用)
•使用dllhost作为代理主机