1

我们将应用程序从 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 项目 - 在这台机器上生成的任何东西 - 调试版本,也可以正常工作 - 但发布版本 - 没有调试信息,将有相同的密码问题。

4

2 回答 2

0

如果不查看您的实际代码和数据,这真的很难诊断。最有可能的是,当您从 Indy 9 切换到 10 时,您的 Indy 10 代码实际上并未使用与您的 Indy 9 代码等效的正确功能。请提供更多详细信息。

于 2010-11-04T19:00:39.347 回答
0

您可以尝试使用 OutputDebugString 或将密码记录到服务器端的文件中,以确保它正确接收它。

另外,您使用的是最新版本的 Indy 吗?可能存在与字符串处理有关的修复。

于 2010-11-03T22:23:27.307 回答