Oleview错误“加载类型库错误”?

时间:2009-06-08 09:59:40

标签: dll com typelib oleview

类型库声明应用程序或动态链接库(DLL)公开的类,接口,常量和过程。类型库通常是程序文件中的资源;它也可以是扩展名为.tlb或.olb。

的独立二进制文件

因此,某些DLL仍然可以在不声明为TypeLib的情况下公开接口。

实际上我正在尝试从oleview打开一个dll并显示错误消息“错误加载类型库”。

根据我的理解,如果我们有从DLL暴露的接口,那么它应该由oleview打开,否则它不能有暴露的接口或函数。

我们有暴露界面的任何可能性,但Oleview仍然无法查看。

4 个答案:

答案 0 :(得分:3)

可以创建匿名COM组件以及仅支持IUnknown和私有接口的组件。没有严格要求应在类型库中定义组件的所有信息。类型库使那些试图集成组件并为COM提供布局和其他信息的人更容易。

另请注意,有时脚本兼容的组件(IDispatch,IDispatchEx)仅支持运行时信息,因此这些组件通常附带一个简单的类型库或根本不附带。但是,对于公开这些接口的组件,您可以通过这些接口查询它们以获取信息。

最后,OleView使用ITypeLib / ITypeInfo来检查类型信息。并非所有COM库都提供实现,有些可能会选择将信息存储在单独的位置。

答案 1 :(得分:1)

  

......有可能还有一些DLL   暴露接口而不是   声明为TypeLib。

是。您可以拥有一个没有tlb的COM DLL(例如,它不是VC ++默认为ATL项目制作的)。

  

我们有dll的任何可能性   暴露接口仍然不能   Oleview观看。

只是一个疯狂的猜测(不确定它甚至是正确的建议)但你的DLL是否包含一个引用它无法找到的外部TLB的tlb?

此外,您的TLB可能包含OLEView根本无法消化的不受支持(可能是自定义)类型。它纯粹是一种双接口的DLL吗?

答案 2 :(得分:1)

首先,您应该使用File-> View Typelib打开库,而不是按工具栏按钮。这是一个典型的错误。

然后,您可以轻松地在资源中没有类型库的进程内COM服务器,但是后期绑定和默认封送将不起作用,否则它将正常运行。当您实现一组外部定义的接口(例如IFilter)并且确定没有人既不使用后期绑定也不使用封送COM服务器时,通常会这样做。

答案 3 :(得分:0)

OleView可能无法查看类型库 - 这不是世界上最稳定的软件。这并不是说没有类型库,或者这样定义的接口将无法使用。