我正在处理两个基于ATL的COM项目。
两者都实现DllRegisterServer
只是
STDAPI DllRegisterServer(void)
{
// registers object, typelib and all interfaces in typelib
return _Module.RegisterServer(TRUE);
}
最终打电话
::RegisterTypeLib(pTypeLib, bstrPath, szDir);
在atlbase.h:6516中。
但是由于某种原因,此调用使项目之一创建了
HKEY_CLASSES_ROOT\TypeLib\<guid>\<version>\0\win64
在Windows 7 32位上使用regsvr32.exe注册时。
另一个项目正确创建
HKEY_CLASSES_ROOT\TypeLib\<guid>\<version>\0\win32
。
我应该从哪里开始寻找并解决此问题?
最佳答案
类型库很有可能是针对win64平台的。
检查类型库的属性。一个人可以通过ITypeLib::GetLibAttr访问它们:
ITypeLib::GetLibAttr(TLIBATTR **ppTLibAttr)
TLIBATTR结构的字段类型为SYSKIND。它包含一个指示平台的值。
typedef enum tagSYSKIND {
SYS_WIN16 = 0,
SYS_WIN32 = ( SYS_WIN16 + 1 ),
SYS_MAC = ( SYS_WIN32 + 1 ),
SYS_WIN64 = ( SYS_MAC + 1 )
} SYSKIND;
希望这可以帮助您解决问题