我有一个32 com库,并希望通过64位应用程序使用它的功能,我已经在互联网上搜索并设法得到这个workaround
HKey_Classes_Root\Wow6432Node\CLSID\[GUID]
REG_SZ (string)
值。名称应为AppID,数据应与您刚搜索的相同COM对象GUID HKey_Classes_Root\Wow6432Node\AppID\
REG_SZ (string)
值,并将其命名为 DllSurrogate 。保留值为空 HKey_Local_Machine\Software\Classes\AppID\
但它在Windows 7 64位上不起作用,主要问题是当我执行第6步时 我发现钥匙已经存在,任何人都知道为什么?或者我怎样才能克服它?
这里的文件非常简短
答案 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
第二种解决方案更简单......