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

时间:2014-06-05 08:43:35

标签: dll com 32bit-64bit atl regsvr32

我使用这些指令用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 \ TypeLib {5EA5008F-7766-499D-B4B0-9A671C752333} \ 1.0 \ 0 \ win32 default = C:\ programming \ vswork \ testfile \ test64atlcom \ Debug \ test64atlcom.dll

HKEY_CLASSES_ROOT \ Wow6432Node \ TypeLib {5EA5008F-7766-499D-B4B0-9A671C752333} \ 1.0 \ 0 \ win32 default = C:\ programming \ vswork \ testfile \ test64atlcom \ Debug \ test64atlcom.dll

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

Registering

unregister

1 个答案:

答案 0 :(得分:2)

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

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

因此,您需要确保Win32中的类型库构建目标32位,而x64构建使它们以64位环境为目标。