2

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

OleView.exe:加载类型库时出错 (TYPE_E_CANTLOADLIBRARY)

也许,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?

4

2 回答 2

0

我遇到了同样的问题,这是因为两个原因

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

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

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

于 2019-10-10T13:19:37.807 回答
0

我可以使用OleWoo 工具将存储在OCA文件中的组件的扩展类型库转换为相应的 IDL 文件。但是,我得到的 IDL 在很多地方都不正确。它不包含分号等。但至少,它可用于获取组件中实现的 COM 接口的一般图片。

于 2016-04-08T08:17:23.930 回答