在64位应用程序上使用com 32位库

时间:2013-07-06 12:19:33

标签: c++ com com+

我有一个32 com库,并希望通过64位应用程序使用它的功能,我已经在互联网上搜索并设法得到这个workaround

  1. HKey_Classes_Root\Wow6432Node\CLSID\[GUID]
  2. 下找到您的COM对象GUID
  3. 找到后,添加新的REG_SZ (string)值。名称应为AppID,数据应与您刚搜索的相同COM对象GUID
  4. HKey_Classes_Root\Wow6432Node\AppID\
  5. 下添加新密钥
  6. 新密钥应与com对象GUID
  7. 相同
  8. 在您刚添加的新密钥下,添加新的REG_SZ (string)值,并将其命名为 DllSurrogate 。保留值为空
  9. HKey_Local_Machine\Software\Classes\AppID\
  10. 下创建新密钥

    但它在Windows 7 64位上不起作用,主要问题是当我执行第6步时 我发现钥匙已经存在,任何人都知道为什么?或者我怎样才能克服它?

    这里的文件非常简短

4 个答案:

答案 0 :(得分:1)

所以,你需要做的是在自己的进程中启动这个32位COM组件,即通过使用CLSCTX_LOCAL_SERVER调用CoCreateInstance。

对于现有的DLL,这将是直接的,或者如果不是,你应该用你自己的32位简单的COM组件包装它,它支持作为本地服务器运行...

尝试调整注册表是一个不赢的游戏 - 按照预期使用Dll并节省您的痛苦。

答案 1 :(得分:0)

可能是由registry virtualization引起的。我过去遇到过这样的问题。最大的烦恼是你无法看到编辑抱怨的值或键已经存在。它们实际上存在于注册表的不同部分(可能是用户配置单元)。

祝你好运

答案 2 :(得分:0)

64位可执行文件无法调用32位DLL(反之亦然)。您应该将您的64位应用程序编译为32位。这样,您就可以使用DLL并在32位和64位操作系统上运行所有这些。

答案 3 :(得分:0)

注册表只是找到所需dll的合适方式。

如果您知道每个系统上32位dll的路径,或者您可以将其与您的应用程序一起传递,并且您可以控制64位应用程序的代码,那么您可以使用以下技术: 1)SxS机制+清单允许从本地文件夹加载dll而不对其进行registring并从中创建COM组件 2)手动设置http://www.codeproject.com/Articles/18433/Emulating-CoCreateInstance

第二种解决方案更简单......