无趣的 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 错误的主要内容,如果未能解决你的问题,请参考以下文章