首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oleview错误“加载类型库时出错”?

Oleview错误“加载类型库时出错”?
EN

Stack Overflow用户
提问于 2009-06-08 09:59:40
回答 4查看 957关注 0票数 5

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

因此,有可能某些DLL在没有声明为TypeLib情况下仍然公开接口。

实际上,我正试图从oleview中打开一个dll,它显示错误消息“错误加载类型库”。

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

我们有dll暴露接口,但仍然不能被Oleview查看的可能性。

EN

回答 4

Stack Overflow用户

发布于 2009-07-14 14:24:18

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

还要注意,有时脚本兼容的组件(IDispatch、IDispatchEx)只支持运行时信息,因此这些组件通常附带一个基本类型库,或者根本没有。但是,使用公开这些接口的组件,您可以通过这些接口询问它们以获取信息。

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

票数 3
EN

Stack Overflow用户

发布于 2009-06-08 10:05:26

...有没有可能某些DLL在没有声明为TypeLib的情况下仍然公开接口。

是。你可以有一个没有tlb的COM (例如,在ATL项目中,它不是VC++默认为你制造的)。

所有的可能性,我们有dll暴露的接口,但仍然不能被Oleview查看。

这只是一个胡乱猜测(甚至不确定它的建议是否正确),但是您的DLL是否包含引用它无法定位的外部tlb的TLB?

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

票数 1
EN

Stack Overflow用户

发布于 2009-06-08 10:17:20

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/964151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档