【发布时间】:2010-11-03 20:52:05
【问题描述】:
我们将应用程序从 Delphi 7 移植到 Delphi 2007 - 并将服务器和客户端之间的通信从 Indy 9 移植到 Indy 10。
检查用户名和密码的部分现在给出了一些非常奇怪的结果: 如果我在使用 Delphi 2007 的虚拟机(开发环境)上,我可以登录到服务器应用程序没有问题。
如果我生成可执行文件并尝试在虚拟机之外运行它,我会得到错误的密码。 检查密码的代码使用 TIdTCPConnection.ReadString 读取数据 - 对于 Delphi 7 和 Delphi 2007 上的 TidTCPConnection.Socket.ReadString。
我猜想这与 Delphi 2007 版本中 ReadString 方法的额外参数有关,但是,为什么当我在调试模式下运行应用程序时我可以登录 - 在调试模式下运行服务器或客户端调试但无法连接到我的 Delphi 2007 环境之外。
这里有没有我遗漏的 DLL 或其他文件?
任何帮助,即使是指出正确的方向,我们都非常感谢 - 从昨天开始,我们就一直坚持下去。
已编辑 - 已编辑 - 已编辑 - 已编辑 - 已编辑 - 已编辑:
我已更改此问题的标题,并已隔离仅在应用程序的发布版本中发生的问题。 使用调试版本,包括 TD32、调试信息、本地符号、调试 DCU 等,问题就不会发生。
我正在测试发布和调试版本的机器只安装了 Delphi 7。 使用 Finalbuilder 生成可执行文件的版本有 Delphi 7 和 Delphi 2007(正在使用的编译器版本)。
我有另一台虚拟机,我用它来开发 Delphi 2007 项目 - 在这台机器上生成的任何东西 - 调试版本,也可以正常工作 - 但发布版本 - 没有调试信息,会有同样的密码问题。
【问题讨论】:
-
我建议您详细说明 I get a wrong password 。和你发的有区别吗?有什么不同?
-
例程尝试比较从客户端发送到服务器的密码 - 它做了一些花哨的事情,如生成随机字符串、混合然后比较 - 但我在密码读取上隔离了问题 - 它不同的价值...我正在遵循 Alan 的建议,看看情况如何...
-
如何将问题更改为您的建议?
-
在发行版中,您可以将发送的密码和接收的密码记录到纯文本文件中。我建议您向我们展示您发送的内容和收到的内容。
-
我已经进一步隔离了这个问题。对于内存管理,我们使用 FastMM——不是捆绑版本,而是最新版本。每当 FullDebug 指令设置为 false 时,就会出现问题。
标签: delphi delphi-2007 indy indy10