调用DLL时奇怪的内存访问

时间:2013-08-02 06:03:28

标签: delphi dll memory-leaks windows-xp

我之前曾询问过有关在Delphi中使用C库的问题(How should I call this particular dll function in Delphi 6)。在你的帮助下,我可以打电话给它。在大约20台PC上一切都很好,除了在一台特定的机器上,该函数返回一个随机字符串。该机器由Celeron x86处理器供电,因此它不是64/32位问题。

任何人都可以帮我确定为什么会在特定的机器上发生这种情况(但不会发生在其他任何机器上)吗?

1 个答案:

答案 0 :(得分:4)

为了能够回答上面的问题,我们应该知道在PC上运行的OS无法返回适当的答案,以及其他答案。没有它,我只能猜出问题的原因。它可能是:

  • 操作系统问题 - 是正在运行的操作系统提供的功能吗? (例如:家庭版Windows版本不支持域名。)(尝试在具有相同操作系统的其他计算机上运行(不仅仅是主要版本,如2000 / Me / XP / Vista / 7等,但是版本如Home /企业/终极等。))
  • 内存管理问题 - 是否为被调用函数正确保留了内存?如果传递的缓冲区太小,某些函数会返回乱码。 (解决方法尝试传递一个非常大的缓冲区,看看传递的缓冲区是否仍然包含乱码。)
  • 调用约定问题 - 您是否检查过是否使用了正确的调用约定? (解决方案使用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窗口的屏幕截图。
  • 不要忘记显示/描述在运行代码时考虑的计算机上发生的事情! (它也可能在那里失败,但由于突然的情况,故障被隐藏了。)