gpt4 book ai didi

使用 COM 互操作的 VB6 应用程序在 IDE 中运行良好,但编译的 EXE 崩溃

转载 作者:行者123 更新时间:2023-12-01 06:46:33 25 4
gpt4 key购买 nike

我目前正在使用 VB6 中的一个应用程序,该应用程序使用使用 .NET 2.0 框架用 C# 编写的 COM 互操作库。

我使用 regasm.exe 使用/codebase 开关从 .NET dll 注册 tlb 文件。然后我能够在 VB6 IDE 中成功构建和运行应用程序,没有任何问题。 .NET 代码使用一个配置文件,所以我将它添加到 VB6 目录中,它从配置中读取。

但是,我随后从项目中编译了一个 EXE 文件,并在运行 IDE 的同一台机器上运行它。我将 EXE 与配置文件结合起来,就像我在使用 VB6.EXE 进行调试时所做的那样,但是当应用程序对其中一个 .NET 类中的方法执行第一次调用时,它会引发一个运行时错误,指示“自动化错误”。

在我的声明中,我从 .NET 类中实例化了以下对象,这似乎工作正常。

Private objSession As New Session
Private curFolder As Folder
Private colFolderTemplates As New FolderTemplateCollection
Private objLicense As New License

但是,执行第一行时会在运行时出现自动化错误:
Call objSession.Configuration.Configure(connectionString)

我尝试将 .NET dll 添加到与 Release EXE 相同的目录并重新注册 tlb 文件,但没有帮助。关于我可以检查的任何建议?

最佳答案

好吧,在黑暗中拍摄。要尝试的事情:

显式新建 Session 对象(以及 License 和 FolderTemplateCollection):

Private objSession as Session
Set objSession = new Session

自动化错误表明来自 .NET 程序集的 GUID 没有持续存在。为此,请在您的 C# 代码中执行此操作 - 这样可以保证所有接口(interface)/类/虚拟表都保持不变,无论您编译 C# 代码多少次:
[Guid("9AC71CA7-6F82-44A3-9ABE-75354B514A46")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface IManager
{
[DispId(1)]
void Display(ADODB.Recordset recordSet);
[DispId(2)]
void Close();
[DispId(3)]
string UserName { get; set; }
[DispId(4)]
string Password { get; set; }
[DispId(5)]
string Database { get; set; }
[DispId(6)]
string Server { get; set; }
[DispId(7)]
ICriteria Criteria { get; set; }
}

[Guid("B9BB5B84-8FBD-4095-B846-EC072163ECD3")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("MyApp.Manager")]
public class Manager : IManager
{
void Display(ADODB.Recordset recordSet)
{
}
...
}

关于使用 COM 互操作的 VB6 应用程序在 IDE 中运行良好,但编译的 EXE 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4627563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com