-2

我之前问过一个关于在 Delphi 中使用 C 库的问题(我应该如何在 Delphi 6 中调用这个特定的 dll 函数)。在你的帮助下,我能够调用它。在大约 20 台 PC 上一切都很好,除了在一台特定的机器上该函数返回一个随机字符串。该机器由 Celeron x86 处理器驱动,因此不是 64/32 位问题。

谁能帮我确定为什么在特定机器上会发生这种情况(而不是在任何其他机器上)?

4

1 回答 1

4

为了能够回答上述问题,我们应该知道 PC 上运行的操作系统无法返回适当的答案,以及其他操作系统。没有它,我只能猜测问题的原因。有可能:

  • 操作系统问题- 正在运行的操作系统是否提供功能?(例如:家庭版windows版本不支持域。)(尝试在具有相同操作系统的其他计算机上运行(不仅像2000/Me/XP/Vista/7等主要版本,而且像Home/Enterprise/Ultimate这样的版本) ETC。))
  • 内存管理问题- 内存是否为被调用函数正确保留?如果传递的缓冲区太小,某些函数会返回乱码。(解决方法尝试传递一个非常大的缓冲区,看看传递的缓冲区是否仍然包含乱码。)
  • 调用约定问题- 您是否检查过是否使用了正确的调用约定?(解决方案使用 stdcall 进行调试构建,并在非工作机器上尝试。)
  • 与功能相关的问题- 我不知道这个 DLL 的功能是什么。它会优雅地失败吗?返回的值是否有可能只是乱码?(解决方法:查看 DLL 文件的文档。)
  • Unicode-Ansi 转换错误- 您可能会在不知情的情况下将 Unicode 字符串评估为 Ansi 或反之亦然。(解决方案:尝试使用 GetCID(pWideChar(prm), pWideChar(uCID) 约定来查看错误是否消失))
  • 硬件错误(不太可能) - 如果出现 RAM 错误,所有响应都可能是随机的。(Soultion:尝试在具有完全相同配置的另一台计算机上运行您的程序。如果运行良好,请在 PC 上运行内存测试,但结果错误。)

如需更准确的帮助,我需要更多关于跑步机的信息:

  • 操作系统(不仅是 2000/Me/XP/Vista/7 等主要版本,还有 Home/Enterprise/Ultimate 等版本)
  • 处理器类

关于问题本身:

  • 一些代码示例在受指控的 PC 上失败,但在其他 PC 上运行良好。(包括内存预留。)
  • 调用前后 CPU 窗口的屏幕截图。
  • 不要忘记显示/描述在运行代码的计算机上发生的情况!(它也可能在那里失败,但由于突发情况,失败被隐藏了。)
于 2013-08-02T08:09:44.977 回答