OleView.exe无法反编译从VB6 OCX中提取的类型库

时间:2016-04-07 07:38:54

标签: vb6 activex idl typelib oleview

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

OleView.exe: Error loading type library (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?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

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