2

我有一个用 Delphi 编写的 POS 应用程序,到目前为止它一直运行良好。

我必须添加一个 web 服务客户端来让政府验证一些文件,即使我以前从未使用过 WebServices/Encryption,我还是设法做到了(真的感谢互联网)。

当我运行该程序并创建其中一个文档时,它已完全验证(访问 Web 服务,发送带有一些数据的 SOAP 信封,并且接收到来自服务器的响应而没有任何问题)。

问题是,如果我创建另一个文档,当我尝试验证它时,我会收到“ Access Violation at 0x07e7bcb5: read of address 0x00000012 ”。

我的验证例程是 DLL 中的一个函数。在它进入 DLL 之前,我将所有代码都放在主项目中,但它使我的程序崩溃:如果我要验证一个文档,就会得到响应,但是当我终止程序或者如果我试图验证另一个。我还尝试动态加载 DLL,因此验证过程将在每次运行时“从头开始”,但它没有用。

我一直在尝试调试它,但我就是无法得到它。一步一步运行,在某行失败,我注释掉,下一次运行在完全不同的地方失败。我也尝试过 EurekaLog,但我不知道如何处理它给我的信息(我从未使用过它)。

我应该采取什么方向?

非常感谢你!努诺·皮卡多

编辑:我可能应该提到我用来访问 Web 服务的内容: - THTTPReqResp 和 WinINet 用于通信 - IXMLDocument 用于创建 SOAP 信封 - LibEay32 用于加密 Web 服务所需的一些数据 - TZDB 从网络获取通用时间基于服务器 - Capicom 2.0 加载通信所需的证书

4

1 回答 1

4

我在工作中使用 EurekaLog 来调试客户端安装时发生的错误。以下是您如何处理 EurekaLog 提供给您的信息:

报告中相当高的位置应该是程序中每个线程的一个堆栈跟踪。最上面的应该是发生错误的那个。这几乎总是错误日志中最重要的事情:它准确地告诉您引发异常时发生了什么。

在代码中找到与堆栈跟踪顶部对应的位置。访问冲突意味着您的代码在某处试图访问(在本例中为读取)未映射到程序地址空间的内存。一堆前导 0 表示您正在尝试从空指针的偏移处读取。这几乎总是意味着以下三件事之一:您正在尝试读取值为 的对象的值nil,您正在尝试在其值为 的对象上调用虚拟方法nil,或者您正在尝试读取的元素长度为 0 的字符串或动态数组(当前由空指针表示)。

既然您知道要查找的内容,请查看代码并根据您可用的信息查看是否有任何可能发生的方法。

于 2013-06-10T21:27:18.947 回答