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

时间:2013-09-09 08:54:35

标签: c# vba com-interop

我有一些在x86 TestDll中使用的C ++ Builder第三方x86 DLL。 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

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

我发现让我感到困惑的是,在Visual Basic中,对thidr-party DLL的引用有一个表单:C:\ windows \ assembly \ GAC_MSIL \ Interop.ThirdPartyDll ......当我添加时在Excel中引用它,它有一个表单:C:\ Program Files(x86)\ Common Files \ ThirdParty \ ThirdParty.dll

2 个答案:

答案 0 :(得分:0)

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

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

最高

答案 1 :(得分:0)

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