第三方 DLL 在从 Excel 调用时工作,在从 VisualBasic/C# 调用时崩溃

本文关键字:调用 在从 崩溃 VisualBasic DLL 第三方 工作 Excel | 更新日期: 2023-09-27 18:30:42

我有许多C++Builder第三方x86 DLL,用于x86 TestDll。TestDll 初始化外部设备并尝试连接它(使用第三方 DLL)。TestDll 已注册并使其可见,以便在 Excel 下对其进行测试。它是从Excel的VBA和类似的Visual Basic .Net代码调用的:

    Dim test As New TestDLL.TestDLL.Class1
    Dim i As Integer
    i = test.Connect()
    If i = 111 Then
        lbl1.Text = "Connected"
    End If
    If i = 222 Then
        lbl1.Text = "Not connected"
    End If
    If i = 333 Then
        lbl1.Text = "Error!!!"
    End If

对 TestDll 的引用将添加到 Excel 中,并且代码成功返回"已连接"。当相同的代码从 Windows 窗体应用程序启动时,它将返回"错误!!"。

我发现让我感到困惑的是,在Visual Basic中,对第三方DLL的引用有一个形式:C:''windows''assembly''GAC_MSIL''Interop.ThirdPartyDll......当我在Excel中添加对它的引用时,它有一个形式:C:''Program Files (x86)''Common Files''第三方''第三方.dll

第三方 DLL 在从 Excel 调用时工作,在从 VisualBasic/C# 调用时崩溃

在我看来,您在不同位置拥有同一 dll 的多个副本。您可以保留 dll 的工作副本并删除所有副本的其余部分。添加 dll 工作副本的引用。

我会删除Visual Basic中的(不起作用的)引用,并通过手动选择文件将其替换为Excel中的引用。

另一种可能性:我知道这可能不是完美的优雅,但是您可以从其他VBA调用Excel实例,然后在Excel实例中运行代码,从而使用工作文件。

麦克斯