11

我有一个 32 com 库,想通过 64 位应用程序使用它的功能,我在互联网上搜索并设法得到这个解决方法

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

但它不适用于 Windows 7 64 位,主要问题是当我执行第 6 步时,我发现密钥已经存在,任何人都知道为什么吗?或者我该如何克服它?

这里的文档非常简短

4

4 回答 4

1

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

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

试图调整注册表是一场没有胜利的游戏——按预期使用 Dll 并为自己省去痛苦。

于 2013-09-03T19:57:31.223 回答
0

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

祝你好运

于 2013-07-22T12:50:22.323 回答
0

注册表只是定位所需dll的合适方法。

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

第二种解决方案要简单得多......

于 2013-09-03T13:57:58.543 回答
0

64-bit executable cannot call a 32-bit DLL (and vice versa). You should compile your 64-bit application as 32-bit. That way you will be able to use the DLL and run all that on 32-bit and 64-bit OS.

于 2013-08-29T20:56:42.167 回答