如何注册32位out-proc ATL COM服务器以使其从64位程序中可用?

时间:2010-11-17 07:16:03

标签: visual-c++ com registry atl

我们有一个32位ATL out-proc COM服务器。为了在注册表中注册自己,它调用CComModule::UpdateRegistryFromResource()并将编译的.rgs文件的id传递给同一个可执行文件的资源。

在32位系统上运行良好,但在64位系统上运行不佳。显然,当一个32位.exe在64位Windows上运行时,它的注册表访问被重定向,因此它在“32位HKCR”中注册,因此64位程序看不到它的注册。

如何在64位HKCR中以cheapeast和最可靠的方式注册相同的out-proc服务器?

1 个答案:

答案 0 :(得分:0)

据我所知/记住你实际上并不需要做任何特别的事情。

我已经检查了一个32位ATL COM EXE服务器,我专门写这个服务器是为了从64位代码(http://www.pretentiousname.com/adobe_pdf_x64_fix/index.html)调用,注册代码完全是样板文件(除非我忘了,今天看不到我的东西)不得不改变。)

除非调用CoCreateInstance(Ex)的64位端的代码专门传递CLSCTX_ACTIVATE_64_BIT_SERVER,否则COM应自动检查32位注册表(如果需要)。 (即使传递了CLSCTX_ACTIVATE_64_BIT_SERVER,它仍然可以。如果该标志是首选项或要求,MSDN并不完全清楚。我假设它还没有被传递。)

问题可能不是COM服务器的注册方式,而是其他问题。或者可能是已经注册的服务器的64位版本,可能来自开发/测试的早期版本,这是通过32位服务器选择的并且失败了?

顺便说一句,在Windows 7和早期操作系统版本上,注册表的哪些部分是32/64位分割存在差异,但我从经验中知道你不需要在Vista,Windows上做任何特别的事情7和Server 2008 R2。我没有亲自测试其他操作系统版本(例如XPx64)。