我使用这些指令用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
为什么会发生这种情况,如何解决?
答案 0 :(得分:2)
错误代码为TYPE_E_REGISTRYACCESS
。 VS项目的一个典型问题是默认模板没有x64
配置,而且从Win32
进行复制并不会更新MIDL设置中的目标环境。
x64
使用Win32
构建将加载并运行,但是它的注册仍然会将类型库COM注册为32位并导致32/64位构建冲突。
因此,您需要确保Win32
中的类型库构建目标32位,而x64
构建使它们以64位环境为目标。