English 中文(简体)
VB6程序崩溃:第二部分。有关修复访问冲突(0xC00000005)的建议。
原标题:
  • 时间:2008-12-03 16:46:12
  •  标签:

这个问题有关。有关修复下面的问题的任何建议?

经过许多对这个程序的试验,我发现了几件事情。

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

  2. 调用该函数的函数在程序执行过程中先被调用时不会崩溃。二分查找错误并不能找到问题,因为在某些地方神秘地、不可靠地调用该函数可以防止 bug 出现。有时重新构建程序似乎会影响该 bug 是否出现。是的,它是一个希森巴格。时间二分查找错误也存在同样的问题。花费 5 小时比较程序的两个版本,只发现两个版本都有的 bug,尽管只有其中一个版本目前显示症状,这并没有多少实际效果。

  3. 崩溃是由于访问冲突0xC00000005引起的。

  4. 运行WinDbg(Windows调试器)发现只有一行代码读取了这个内存位置, LoadPicture(szTmpBMP)。它在一个可怕的函数的末尾被调用,该函数从资源中获取图片并将其放入临时文件中。我对这个函数感到恐惧,为了测试的缘故,我用 LoadPicture(“testcra.bmp”)替换了它,然后没有为此位图调用可怕的资源函数。这并没有帮助。完全删除这个Loadpicture调用也没有帮助,尽管调试器不再能找到读取受影响内存的任何点,并且受影响的内存不再位于同一位置。这个测试是在一个虚拟机上进行的,因此一些内存读取可能不会被调试器看到。

  5. 在Vista上一切正常(我的本地机器和一个Vista虚拟机)。访问冲突只会发生在XP上。

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

最佳回答

我的当前解决方案是尽早创建所有的capicom对象,从第一个加密的数据开始,不再创建新的capicom.encrypteddata实例。这样做可以解决问题,但根本问题可能并没有得到修复。

问题回答

暂无回答




相关问题