gpt4 book ai didi

delphi - 调用 Delphi DLL 会使 VB6 exe 崩溃,错误代码为 "Run-time error ' -2147418113 (8000ffff )' Method ' ~' of object ' ~' failed",但仅在某些机器上!

转载 作者:行者123 更新时间:2023-12-03 15:51:07 25 4
gpt4 key购买 nike

我已经搜索了几个小时,但找不到类似的内容。

这次崩溃有两种情况:一种是“运行时错误 '-2147418113 (8000ffff)' 对象 '~' 的方法 '~' 失败”,第二种是完全崩溃,Windows 询问我是否要向 Microsoft 报告此情况。在第二种情况下,我选择调试一次,它显示“App.exe (OLEAUT32.DLL) 中未处理的异常:0xC0000005:访问冲突。”

反汇编屏幕在以下行的顶行显示黄色指针:

>> 771148A4  mov ecx, dword ptr [esi]
771148A6 add ecx, 15h
771148A9 and ecx, 0FFFFFFF0h
771148AC push ecx
771148AD push esi
...

当调用第三方 Delphi DLL 中的特定基本函数时会出现问题,但我不能直接声明该 DLL 有错误,因为这种情况只发生在我编译的程序可执行文件中。同样的 dll 被数百个其他客户使用,并且(至少目前)我是唯一遇到此问题的人。在客户的 PC 或第三方供应商的办公室中编译的相同源代码可以正常工作。

所以问题归结为:带有 SP6 的 VB6 从完全相同的源代码生成不同的二进制 exe 文件。在我的电脑上编译的那个在我的电脑上运行良好,我安装了一个干净的虚拟电脑来检查这一点,但在它应该的任何地方都不起作用;并且在客户或第三方供应商中编译的版本在除了我的电脑之外的任何地方都可以正常工作。

这与 Boost 描述的问题 ( see this link ) 不同,因为 IDE 和编译的应用程序在所有计算机上的行为方式都相同。它们要么工作正常,要么严重损坏。

Public mXApp As XObjects.XApplication

Public Sub Main
On Error Resume Next
Set mXApp = New XObjects.XApplication
If Err.Number = 0 Then
MsgBox "Found: " & mXApp.Version & vbCrLf & mXApp.GetAppPath
Else
MsgBox "XApp DLL not found. " & Err.Number & ": " & Err.Description
End If
Err.Clear
End Sub

Public Sub Login(Byval uid As String, Byval pwd As String, Byval companyNr as Long)
Dim ok as Boolean
ok = mXApp.Login(uid, pwd, companyNr)' >> CRASH! Program never gets to the next line.'
If ok Then
MsgBox "Login success"
Else
MsgBox "Login fails"
End If
End Sub

请注意,创建 mXApp 对象后,完成两个函数调用 - 即 Version 和 GetAppPath - 没有任何问题。崩溃发生在登录调用中。 VB IDE 对象浏览器显示三个函数的定义如下:

Function Version() As String
Function GetAppPath() As String
Function Login(UserName As String, Password As String, FirmNr As Long) As Boolean

是否有人有任何解决方案或(同样有用的)方法可以让供应商在他们自己的机器上重现此问题?

最佳答案

嗯,如果没有看到 Delphi 方面的情况,很难确定,但是当您在 DLL 调用中遇到这样的问题时,首先需要检查两个标准的事情。

首先,确保 DLL 函数及其在 VB 程序中的导入 header 使用相同的调用约定。如果 VB 将参数放在一处,而 Delphi DLL 在其他地方查找它们,则会出现未定义的行为。

其次,确保两侧使用相同的字符串类型。如果这是 COM,则您的字符串类型应该是 COM BSTR 类型,在 Delphi 中称为 WideString。不知道VB怎么调用它。如果您向 DLL 传递的字符串类型与预期接收的字符串类型不同,它将获得损坏的数据。

仔细检查这两件事,看看是否不能解决问题。

关于delphi - 调用 Delphi DLL 会使 VB6 exe 崩溃,错误代码为 "Run-time error ' -2147418113 (8000ffff )' Method ' ~' of object ' ~' failed",但仅在某些机器上!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4298380/

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