【发布时间】:2014-07-15 00:35:50
【问题描述】:
如何以编程方式确定给定的原生 VB6 生成的 DLL/OCX 依赖于哪些类型库(GUID 和版本)?
对于背景:当打开一个引用类型库之一无法加载其依赖项之一的项目时,VB6 IDE 会阻塞,但它并没有帮助说明无法满足哪个依赖项——甚至哪个引用具有无法满足的依赖关系。这是我公司经常发生的事情,所以我试图补充 VB6 IDE 的故障排除信息。
相关细节/尝试:
- 我有有VB源代码。这告诉我回购中特定修订版的 GUID 和版本,但是在分析 DLL/OCX/TLB 文件时,我不知道回购的哪个版本(如果有的话——可能来自分支或可能永远不会有已提交到分支)给定的 DLL/OCX 对应。
- 我尝试过使用
tlbinf32.dll,但它似乎无法列出导入。 - 我对 PE 了解不多,但我在 PE 查看器中打开了其中一个 DLL,它只在导入部分显示
MSVBVM60.dll。这似乎是 VB6 生成的类型库的一个特殊怪癖:它们仅链接到MSVBVM60,但对其余依赖项具有某种延迟加载机制。 - 即使我尝试过的大多数现有工具都没有提供信息 - 例如,depends.exe 只能找到
MSVBVM60.dll。 -
然而:OLEView 是一个用于 Visual Studio 的实用程序,它以某种方式生成了一个 IDL 文件,其中包括
importlib指令。鉴于 VB 不使用 IDL 文件,它显然是在以某种方式生成信息。所以这是可能的——我只是不知道怎么做。
真的,如果 OLEView 不这样做,我现在已经放弃了,因为这是不可能的。关于如何实现这一点的任何想法?
【问题讨论】:
-
类似于 OLEView 所做的任何事情,当您从 NET 项目中引用 COM DLL 时,TLBIMP 也会读取 TLB。 docs.microsoft.com/en-us/dotnet/framework/tools/…
标签: com portable-executable com+ tlbinf32