【问题标题】:OleView.exe can't decompile type library extracted from VB6 OCXOleView.exe 无法反编译从 VB6 OCX 中提取的类型库
【发布时间】:2016-07-27 22:47:39
【问题描述】:

我正在尝试获取使用 VB6 创建的复杂 ActiveX 控件的类型库的 IDL 文件。我尝试在使用 64 位 Win10 Pro 的开发电脑上使用 OleView.exe 执行此操作。当我尝试打开 OCX 文件或从中提取的 TLB 时,OleView 的 x64 版本会崩溃。 x86 版本两次显示以下错误框:

也许,TLB 文件有多个importlib 指令,OleView 找不到引用的文件。我可以在 OleView 中查看该组件的 OCA 文件,它的 IDL 等效项在顶部包含以下几行:

// TLib :     // TLib : Visual Basic objects and procedures : {FCFB3D2E-A0FA-1068-A738-08002B3371B5}
importlib("VB6.OLB");
// TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
importlib("stdole2.tlb");
// TLib : Visual Basic runtime objects and procedures : {EA544A21-C82D-11D1-A3E4-00A0C90AEA82}
importlib("3");

如何用 OleView 解决这个问题?或者有没有其他工具可以将TLB转换为IDL?

【问题讨论】:

  • registry中找不到类型库,与文件无关。您必须在机器上安装 VB6 并正确注册此 OCX。
  • @HansPassant,VB6 是从原始 VS98 CD 安装的。 VB6.OLB 已注册:其注册表项HKEY_CLASSES_ROOT\TypeLib\{FCFB3D2E-A0FA-1068-A738-08002B3371B5}\6.0\9\win32 指向正确的文件位置。唯一的问题可能是指向C:\Windows\SysWOW64\msvbvm60.dll\3 的“3”库。还有其他想法吗?
  • 好吧,不用猜了,使用 SysInternals 的进程监视器。您应该看到 oleview.exe 正在搜索注册表,但没有找到它所抱怨的类型库。
  • 如果你安装了 VS6 中的C:\Program Files (x86)\Microsoft Visual Studio\Common\Tools\OLEVIEW.EXE,你可以试试。 \3 部分表示 DLL 中 TYPELIB 资源的 ID。 VB6 运行时在其可执行文件中打包了两个类型库,其中 1(默认)和 3 作为资源 ID。
  • @wqw,试过了 - 来自 VS6 的 OleView 也没有帮助。

标签: vb6 activex idl typelib oleview


【解决方案1】:

我可以使用OleWoo tool 将存储在OCA 文件中的组件的扩展类型库转换为相应的IDL 文件。但是,我得到的 IDL 在很多地方都不正确。它不包含分号等。但至少,它可以用来大致了解组件中实现的 COM 接口。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,原因有两个

    1. VB 组件的 tlb 未注册。您需要 以管理员身份运行 regtlib。之后 oleview 将打开 tlb 但出现错误。

    2. VB 组件引用的其中一个 tlb 文件未注册。 在顶部的 OLE 视图中,将有如下条目 // TLib : ??filename : {000XXXXX-0000-0000-C000-000000000046}(一些 GUID)

    ??filename 表示该GUID 对应的tlb 没有注册。您需要找出对应的 tlb 并针对文件名运行regtlib

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 2021-07-22
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      相关资源
      最近更新 更多