我已经完成了所有搜索工作,无法找到解决这个奇怪问题的方法,这个问题一直困扰着我大约5个小时。我在Lazarus开始使用这个应用程序,然后把它带到了D5pro,看看我是否可以解决问题。以为这可能是拉撒路的“事情。”
在D5中,我有一个完全正常工作的应用程序(到目前为止一直很好),我决定尝试一些不同的外观和感觉方法,所以我将“将项目另存为”进入一个新文件夹。然后我浏览了所有包含的单元并将它们保存到新文件夹中。我将两个OpenSSL .DLL复制到新文件夹。编译运行了,一切正常。好吧,差不多。
当我尝试新应用时,POP3单元在“登录”
时崩溃我已经介入,所有基本登录内容,服务器,名称,SSL参数等都与前一版本相同。
我回到原来的应用程序并完成了一个完整的构建,它仍然工作正常。我在新应用程序上做了一个完整的Build,它仍然在登录时崩溃。
它通过pop3.Sock.SSLDoConnect()确定,但是从pop3.Login()返回错误10061,根据BlckSock Synapse-Unit,意味着“连接被拒绝。”
从此调用返回时结果:= ssConnect(s,@ name,SizeOfVarSin(name));我假设在.DLL中它的结果为-1,然后触发GetLastError,即“10061 - 连接被拒绝”
据我所知,两个项目之间的一切都是相同的。所有库路径都在环境中,而不在项目中。
有什么想法和建议吗?
答案 0 :(得分:0)
没有多少工作要做。你能在各种外部呼叫时刻看到调试器中的所有参数吗?
编译器的改变当然可以使隐藏的错误浮出水面,就像例如优化。一个众所周知的区别是温度的生命周期可能会有所不同(见here)。
可能你需要首先确定定义的差异。和Delphi一样,调试器是你的朋友。
答案 1 :(得分:0)
好的,问题解决了。
<> Rufo爵士,这是一个好主意,但它没有帮助,但感谢您的努力。在我开始编译之前,我已将ssleay32.dll复制到新的app文件夹中。那没起效。我做了一个完整的Build,它仍然无法正常工作。
我决定删除ssleay32.dll和libeay32.dll并执行完整的Build。我跑了它,当然它崩溃了,但这次我预料到了。
然后我将两个.ddl复制回新的app文件夹并完成另一个完整的Build。
Bingo问题解决了。看起来很奇怪,但它与Lazarus和D5都有效。与.dll链接到已编译的.dcu的方式有关。
使用没有.dll的Build进行清除。将.dll放回到文件夹中,另一个Build将.dll链接正确地包含在.dcu中。
Aaarrggghhhhh:)