类型库声明应用程序或动态链接库(DLL)公开的类,接口,常量和过程。类型库通常是程序文件中的资源;它也可以是扩展名为.tlb或.olb。
的独立二进制文件因此,某些DLL仍然可以在不声明为TypeLib的情况下公开接口。
实际上我正在尝试从oleview打开一个dll并显示错误消息“错误加载类型库”。
根据我的理解,如果我们有从DLL暴露的接口,那么它应该由oleview打开,否则它不能有暴露的接口或函数。
我们有暴露界面的任何可能性,但Oleview仍然无法查看。
答案 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可能无法查看类型库 - 这不是世界上最稳定的软件。这并不是说没有类型库,或者这样定义的接口将无法使用。