1

在较早的问题中,我试图让 C# 类充当 VB5 和 6 的 COM 对象。我确实设法让 COM 对象与 VB6 应用程序一起工作,但在让它与 VB5 一起工作时遇到了问题——在同一台机器。

作为参考,较早的问题是HERE

我的最终目标是让这个 COM 对象适用于 VB5,但是当它运行时会引发异常:运行时错误 80070002。对 Stackoverflow 的研究表明此错误代码是 File not Found 异常。VB6 程序能够与 VB5 程序(相同的代码)在同一台机器上运行,COM DLL 已正确注册(使用 regasm.exe)并且 TLB 显示在 VB5 的引用列表中。执行代码为:

Dim arcom As ARCOMObject.ARCOM_Class
Set arcom = New ARCOMObject.ARCOM_Class
Dim s As String
s = arcom.GetServiceResponse()
MsgBox (s)

在执行实例化类的行时抛出异常。

在我发现的其他地方,特别是在我上面所做的第二个 SO 参考中,有人建议使用实用程序depends.exe 来查看可能缺少哪些依赖项。不幸的是,我在我的 .Net 开发机器上和 VB5 机器上都找不到任何这样的实用程序。我不确定这是否会告诉我任何事情,但是...

那么,什么是VB5 看不到的,而VB6 要么可以看到,要么不需要?

编辑添加:

重要警告——因为它在从 IDE 运行时抛出了错误,所以我从未构建可执行文件来运行它,但是当我最终拍摄并这样做时,因为 DependencyWalker 需要它,我发现可执行文件本身工作正常!现在,DependencyWalker 给我消息“警告:由于延迟加载依赖模块中缺少导出功能,至少一个模块有一个未解析的导入。” 哇,太好了,这句话到底是什么意思?哈哈。

无论如何,我不确定我目前是否有需要解决的问题,但欢迎提出任何建议!

4

2 回答 2

2

当我被困在解决这些类型的问题时,这对我总是有用的。您的问题是 VB5 版本缺少某个文件,因此您需要知道哪个文件。简单的解决方案(不求助于 WinDBG)是抛出 FileMon 或 ProcMon - 过滤它,以便您只看到失败。

然后,当您的应用程序失败时,您会看到缺少哪个文件。

于 2011-04-29T17:56:43.653 回答
0

这可能很有趣: 由于隐式依赖模块中缺少导出函数,至少一个模块具有未解析的导入

于 2011-04-29T18:53:19.543 回答