【问题标题】:Oleview error "error loading type library"?Oleview错误“错误加载类型库”?
【发布时间】:2010-11-01 03:19:38
【问题描述】:

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

那么是否有可能某些 DLL 仍然暴露接口而不被声明为 TypeLib。

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

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

我们有 dll 暴露接口但仍然无法被 Oleview 查看的任何可能性。

【问题讨论】:

  • 除了oleview之外还有什么工具可以判断dll暴露的接口吗?

标签: dll com typelib oleview


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    是的。您可以拥有一个没有 tlb 的 COM DLL(尽管它不是 VC++ 在 ATL 项目中默认为您制造的)。

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-10
          • 2017-07-03
          • 2020-09-05
          • 2017-11-19
          • 1970-01-01
          • 1970-01-01
          • 2012-07-12
          • 2015-12-10
          相关资源
          最近更新 更多