0

这个问题有关。有关解决以下问题的任何建议?

在对该程序进行了大量实验后,我发现了几件事。

  1. 在运行代码行时,它相对一致地崩溃(大约 90% 的时间)Set Message = New CAPICOM.EncryptedData,. 请注意,这上面的行仅仅是Dim Message As CAPICOM.EncryptedData.

  2. 在程序执行的早期调用时,进行该调用的函数不会崩溃。对错误的二进制搜索无法找到问题,因为在某些地方神秘地调用该函数,不可靠地阻止了错误的发生。如果出现错误,有时重建程序似乎会产生影响。是的,它是一只海森虫。同样的问题也适用于错误的时间二分搜索。花了 5 个小时比较程序的两个版本,却发现两个版本都有错误,即使其中只有一个版本目前显示症状不是很有效。

  3. 崩溃是由于访问冲突 0xC00000005

  4. 运行 WinDbg(Windows 调试器)显示只有一行代码读取此内存位置,LoadPicture(szTmpBMP). 它在一个可怕的函数结束时调用,该函数从资源中抓取图片并将其粘贴到临时文件中。我很害怕这个函数,为了测试,我用调用替换它LoadPicture("testcra.bmp"),然后没有为那个位图调用可怕的资源函数。这没有帮助。完全删除对 loadpicture 的调用也无济于事,尽管调试器无法再找到正在读取受影响内存的任何点,并且受影响的内存不再位于同一位置。此测试是在 VM 上完成的,因此调试器不一定能看到某些内存读取。

  5. 一切都在 Vista 上完美运行(我的本地机器和 Vista 虚拟机)。访问冲突只发生在 XP 上。

  6. 我正在使用 VB6 版本 8176、6.0.8169

4

1 回答 1

0

我目前可行的解决方案是尽早创建我所有的 capicom 对象,并且永远不要创建第一个之后的 capicom.encrypteddata 的新实例。这行得通,但根本问题不太可能真正得到解决。

于 2008-12-03T22:03:08.510 回答