1

我已经完成了所有的搜索,但找不到解决这个困扰我大约 5 个小时的奇怪问题的方法。我在 Lazarus 中启动了这个应用程序,然后把它带到了 D5pro 上,看看我是否能解决这个问题。认为这可能是拉撒路的“东西”。

在 D5 中,我有一个可以正常运行的应用程序(到目前为止一切正常),我决定尝试一些不同的外观和感觉方法,因此我将“项目另存为”到一个新文件夹中。然后我浏览了所有包含的单元并将它们保存到新文件夹中。我将两个 OpenSSL .DLL 复制到新文件夹中。进行了编译并运行,一切正常。嗯,差不多。

当我尝试新应用程序时,POP3 单元在“登录”时崩溃

我已经逐步完成,所有基本的登录内容、服务器、名称、SSL 参数等都与以前的版本相同。

我回到原来的应用程序并做了一个完整的构建,它仍然运行良好。我在新应用程序上做了一个完整的构建,它仍然在登录时崩溃。

它通过 pop3.Sock.SSLDoConnect() OK,但从 pop3.Login() 返回错误 10061,根据 BlckSock Synapse-Unit,这意味着“连接被拒绝”。

当它从此调用返回时 Result:=ssConnect(s, @name, SizeOfVarSin(name)); 我假设在.DLL中它的结果为-1,然后触发GetLastError,即“10061 - 连接被拒绝”

据我所知,这两个项目之间的一切都是相同的。所有库路径都在环境中,而不是在项目中。

有什么想法和建议吗?

4

2 回答 2

0

没有太多工作要做。你能在调试器中看到各种外部调用时刻的所有参数吗?

当然,编译器的更改可以使隐藏的错误浮出水面,就像优化一样。一个众所周知的区别是 temps 的生命周期可能会有所不同(请参见此处)。

可能您需要首先确定定义差异。与 Delphi 一样,调试器在这里是您的朋友。

于 2013-03-28T19:48:37.687 回答
0

好的,问题解决了。

Rufo 爵士,这是个好主意,但没有帮助,但感谢您的尝试。

在开始编译之前,我已将 ssleay32.dll 复制到新的应用程序文件夹中。它不起作用。我做了一个完整的构建,它仍然没有工作。

我决定删除 ssleay32.dll 和 libeay32.dll 并进行完整的构建。我运行它,当然它崩溃了,但这次我预料到了。

然后我将这两个 .ddl 复制回新的应用程序文件夹并进行了另一个完整的构建。

宾果问题解决了。看起来很奇怪,但它适用于 Lazarus 和 D5。与 .dll 链接到已编译的 .dcu 的方式有关。

在没有可用 .dll 的情况下进行构建清除了这一点。将 .dll 放回文件夹中,另一个 Build 将 .dll 链接正确包含到 .dcu 中。

啊啊啊啊啊:)

于 2013-03-29T17:28:37.920 回答