无趣的 BHO dll 64 位和 32 位使用 regsvr32 导致 0x8002801c 错误

Posted

技术标签:

【中文标题】无趣的 BHO dll 64 位和 32 位使用 regsvr32 导致 0x8002801c 错误【英文标题】:Uninteresting BHO dll 64 bit and 32 bit using regsvr32 cause 0x8002801c error 【发布时间】:2014-07-26 04:07:01 【问题描述】:

我使用这些说明创建了带有 ATL 的简单 BHO http://msdn.microsoft.com/en-us/library/bb250489(v=vs.85).aspx。我正在创建 dll 的 64 位和 32 位 dll。当我尝试使用 regsvr32 在 32 位版本之后取消注册 64 位 dll 时,会出现问题,我收到 0x8002801c 错误。 (如果我反之亦然,也会发生同样的问题)。我已将图片添加到 celrify。

我认为它与 TypeLib 注册有关,因为我对 64 位和 32 位做同样的事情,没有区别,注册 32 位后我有这两个键

HKEY_CLASSES_ROOT\TypeLib5EA5008F-7766-499D-B4B0-9A671C752333\1.0\0\win32 默认 = C:\programming\vswork\testfile\test64atlcom\Debug\test64atlcom.dll

HKEY_CLASSES_ROOT\Wow6432Node\TypeLib5EA5008F-7766-499D-B4B0-9A671C752333\1.0\0\win32 默认 = C:\programming\vswork\testfile\test64atlcom\Debug\test64atlcom.dll

为什么会发生这种情况,如何解决?

【问题讨论】:

错误代码是 TYPE_E_REGISTRYACCESS,我会考虑确保您的 x64 版本具有 64 位目标环境(项目设置,MIDL;/env 非常感谢!!!它似乎解决了我的问题 【参考方案1】:

错误代码是TYPE_E_REGISTRYACCESS。 VS 项目的一个典型问题是默认模板没有 x64 配置,并且它从 Win32 复制不会更新 MIDL 设置中的目标环境。

x64 使用Win32 构建会加载并运行,但它的注册仍会将类型库 COM 注册为 32 位并导致 32/64 位构建冲突。

因此,您需要确保 Win32 中的类型库针对 32 位构建,而 x64 构建的类型库针对 64 位环境。

【讨论】:

以上是关于无趣的 BHO dll 64 位和 32 位使用 regsvr32 导致 0x8002801c 错误的主要内容,如果未能解决你的问题,请参考以下文章

在 .NET 项目中同时引用 32 位和 64 位 dll 并单击一次 [重复]

在一个程序中结合 32 位和 64 位 DLL

如何使代码兼容 32 位和 64 位

关于 64 位和 32 位 JVM

Inno-setup 32 位和 64 位合二为一

使用 mingw-w64 和 cmake 构建 32 位和 64 位应用程序