c# COM组件与VB6一起工作,但不是VB5——这是怎么回事?

本文关键字:VB5 怎么回事 组件 COM VB6 工作 一起 | 更新日期: 2023-09-27 17:54:08

在之前的一个问题中,我试图获得一个c#类作为VB5的COM对象;6. 我确实设法让COM对象与VB6应用程序一起工作,但在同一台机器上与VB5一起工作时遇到了问题。

作为参考,前面的问题在这里。

我的最终目标是让这个COM对象为VB5工作,但是当它运行时它抛出一个异常:运行时错误80070002。对Stackoverflow的研究表明,这个错误代码是一个未找到的文件异常。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可以看到或不需要的?

EDITED TO ADD:

重要警告—因为它抛出了错误,而从IDE运行,我从来没有构建可执行文件来运行它,但当我终于采取了一个镜头,这样做,因为DependencyWalker需要它,我发现可执行文件本身工作正常!现在,DependencyWalker给了我一条消息:"警告:由于延迟加载依赖模块中缺少导出函数,至少有一个模块具有无法解析的导入。"哇,太酷了,这句话到底是什么意思?LOL .

无论如何,我不确定我现在是否有问题需要解决,但欢迎任何建议!

c# COM组件与VB6一起工作,但不是VB5——这是怎么回事?

当我被困在解决这些类型的问题时,以下是对我有效的方法。您的问题是VB5版本丢失了一个文件,所以您需要知道是哪个文件。简单的解决方案(不需要使用WinDBG)是抛出FileMon或ProcMon——对其进行过滤,这样您只会看到失败。

当你的应用程序失败时,你会看到哪个文件丢失了

这可能很有趣:由于隐式依赖模块

中缺少导出函数,至少有一个模块存在无法解析的导入。