注册COM DLL失败,如何判断其是否包含类型库?
以下是几种实用的检查方式:
使用Visual Studio的dumpbin工具
打开Visual Studio命令提示符(或Developer Command Prompt),执行命令:dumpbin /resources some.dll
查看输出结果,如果存在TYPELIB类型的资源条目,说明DLL包含类型库。也可以用dumpbin /headers some.dll,在资源部分查找TYPELIB相关标识。使用Resource Hacker工具
用Resource Hacker打开目标DLL,左侧资源树中如果有TYPELIB节点,展开后能看到具体的类型库内容,证明DLL包含类型库。使用OleView工具(Windows SDK自带)
启动OleView,通过菜单栏File→View TypeLib加载目标DLL。如果能正常加载并显示接口、枚举、类等类型库信息,说明DLL包含有效的类型库;若加载失败或报错,则表示没有类型库或类型库损坏。注册表检查(仅限曾注册过的DLL)
若该DLL之前成功注册过,可查看注册表路径HKEY_CLASSES_ROOT\CLSID\{对应COM类的CLSID}\InprocServer32,如果存在TypeLib项,说明该DLL关联了类型库。但此方法不适用于未注册过的DLL。
补充说明:如果确认DLL确实没有类型库,注册失败可能是因为该COM服务器需要依赖类型库对外暴露接口。这种情况下,需联系开发者获取包含类型库的DLL版本,或者确认该DLL是否属于无需注册的COM客户端库。
内容的提问来源于stack exchange,提问作者William

