12 个解决方案
#1
出现的错误和这个差不多。http://www.fzyw.cn/111.jpg
#2
从你贴的错误信息上看不出具体问题何在,估计是内存没释放,或者数据库的问题。
关键是你没必要一直比对,你应该写一个APIHook(例子代码网上多得很),接管InvalidateRect、InvalidateRgn,有更新区域之后再存。
关键是你没必要一直比对,你应该写一个APIHook(例子代码网上多得很),接管InvalidateRect、InvalidateRgn,有更新区域之后再存。
#3
内存访问出错,查你的程序是否有内存泄漏.测试程序时将编译项的Runtime errors全部打开,或用第三方的测试工具(如boundcheck)对程序进行测试.
#4
to DelphiGuy:
我没有一直比较,就是在两个截图中取一个区域进行比较,如果有一点不一样就退出比较,然后保存。
我没有一直比较,就是在两个截图中取一个区域进行比较,如果有一点不一样就退出比较,然后保存。
#5
那你不是一直在截图、比对吗?:)
#6
也是,如果图有不同,反而比较的少。你说的APIHook我不会用啊。我是个自学的,只是自己玩玩,能教我怎么进行你说的---(接管InvalidateRect、InvalidateRgn,有更新区域之后再存。)吗?
#7
对于这类内存出错,可以根据报错信息找到源代码行,然后就好定位了,给你一个方法供你参考,百试百灵:
Access violation是程序中最常见的一种错误,但是我们可以利用Access violation的提示信息,定位到源代码的具体位置,例如:Access violation at address 005B21FE in module Project1.exe'. Read of address 8080809C,其中005B21FE就是MAP地址,我们只要用这个公式:005B21FE-400000-1000=1B11FE,然后通过源代码生成的MAP文件找到最近的位置,就可以定位了。MAP文件的结构为:2997 0001:001B11F3 3000 0001:001B1207,它是和源代码对应的,前面是源代码行,后面是MAP地址,在DELPHI中生成MAP文件的选项是:Project->Options->Linker->Map file->选中Detailed
Access violation是程序中最常见的一种错误,但是我们可以利用Access violation的提示信息,定位到源代码的具体位置,例如:Access violation at address 005B21FE in module Project1.exe'. Read of address 8080809C,其中005B21FE就是MAP地址,我们只要用这个公式:005B21FE-400000-1000=1B11FE,然后通过源代码生成的MAP文件找到最近的位置,就可以定位了。MAP文件的结构为:2997 0001:001B11F3 3000 0001:001B1207,它是和源代码对应的,前面是源代码行,后面是MAP地址,在DELPHI中生成MAP文件的选项是:Project->Options->Linker->Map file->选中Detailed
#8
先谢谢了。现在就试试看。不过我的程序不是每一运行就这样的,有时运行一天后才出现这个问题。
#9
那可能是存储的时候出了问题。
#10
是啊,有时会出现“存储空间不足”这样的问题,我用的是ACCESS,可有时才几M啊。
MAP文件末尾Line numbers for Project1(H:\拍照\Project1.dpr) segment .text
9 0001:0009C98C 10 0001:0009C99C 11 0001:0009C9A8 12 0001:0009C9C0
13 0001:0009C9CC
Bound resource files
d:\program files\borland\delphi7\Lib\Buttons.res
d:\program files\borland\delphi7\Lib\ExtDlgs.res
d:\program files\borland\delphi7\Lib\Controls.res
Unit1.dfm
Project1.res
Project1.drf
Program entry point at 0001:0009C98C
MAP文件末尾Line numbers for Project1(H:\拍照\Project1.dpr) segment .text
9 0001:0009C98C 10 0001:0009C99C 11 0001:0009C9A8 12 0001:0009C9C0
13 0001:0009C9CC
Bound resource files
d:\program files\borland\delphi7\Lib\Buttons.res
d:\program files\borland\delphi7\Lib\ExtDlgs.res
d:\program files\borland\delphi7\Lib\Controls.res
Unit1.dfm
Project1.res
Project1.drf
Program entry point at 0001:0009C98C
#11
存储空间不足时,看看是否是存储文件超限了
还有你那比较的时间间隔是怎么控制的?
还有你那比较的时间间隔是怎么控制的?
#12
是用的timer控件,每两秒截一个图片比较。还有个问题,用SCANLINE时能隔行比较吗?
#1
出现的错误和这个差不多。http://www.fzyw.cn/111.jpg
#2
从你贴的错误信息上看不出具体问题何在,估计是内存没释放,或者数据库的问题。
关键是你没必要一直比对,你应该写一个APIHook(例子代码网上多得很),接管InvalidateRect、InvalidateRgn,有更新区域之后再存。
关键是你没必要一直比对,你应该写一个APIHook(例子代码网上多得很),接管InvalidateRect、InvalidateRgn,有更新区域之后再存。
#3
内存访问出错,查你的程序是否有内存泄漏.测试程序时将编译项的Runtime errors全部打开,或用第三方的测试工具(如boundcheck)对程序进行测试.
#4
to DelphiGuy:
我没有一直比较,就是在两个截图中取一个区域进行比较,如果有一点不一样就退出比较,然后保存。
我没有一直比较,就是在两个截图中取一个区域进行比较,如果有一点不一样就退出比较,然后保存。
#5
那你不是一直在截图、比对吗?:)
#6
也是,如果图有不同,反而比较的少。你说的APIHook我不会用啊。我是个自学的,只是自己玩玩,能教我怎么进行你说的---(接管InvalidateRect、InvalidateRgn,有更新区域之后再存。)吗?
#7
对于这类内存出错,可以根据报错信息找到源代码行,然后就好定位了,给你一个方法供你参考,百试百灵:
Access violation是程序中最常见的一种错误,但是我们可以利用Access violation的提示信息,定位到源代码的具体位置,例如:Access violation at address 005B21FE in module Project1.exe'. Read of address 8080809C,其中005B21FE就是MAP地址,我们只要用这个公式:005B21FE-400000-1000=1B11FE,然后通过源代码生成的MAP文件找到最近的位置,就可以定位了。MAP文件的结构为:2997 0001:001B11F3 3000 0001:001B1207,它是和源代码对应的,前面是源代码行,后面是MAP地址,在DELPHI中生成MAP文件的选项是:Project->Options->Linker->Map file->选中Detailed
Access violation是程序中最常见的一种错误,但是我们可以利用Access violation的提示信息,定位到源代码的具体位置,例如:Access violation at address 005B21FE in module Project1.exe'. Read of address 8080809C,其中005B21FE就是MAP地址,我们只要用这个公式:005B21FE-400000-1000=1B11FE,然后通过源代码生成的MAP文件找到最近的位置,就可以定位了。MAP文件的结构为:2997 0001:001B11F3 3000 0001:001B1207,它是和源代码对应的,前面是源代码行,后面是MAP地址,在DELPHI中生成MAP文件的选项是:Project->Options->Linker->Map file->选中Detailed
#8
先谢谢了。现在就试试看。不过我的程序不是每一运行就这样的,有时运行一天后才出现这个问题。
#9
那可能是存储的时候出了问题。
#10
是啊,有时会出现“存储空间不足”这样的问题,我用的是ACCESS,可有时才几M啊。
MAP文件末尾Line numbers for Project1(H:\拍照\Project1.dpr) segment .text
9 0001:0009C98C 10 0001:0009C99C 11 0001:0009C9A8 12 0001:0009C9C0
13 0001:0009C9CC
Bound resource files
d:\program files\borland\delphi7\Lib\Buttons.res
d:\program files\borland\delphi7\Lib\ExtDlgs.res
d:\program files\borland\delphi7\Lib\Controls.res
Unit1.dfm
Project1.res
Project1.drf
Program entry point at 0001:0009C98C
MAP文件末尾Line numbers for Project1(H:\拍照\Project1.dpr) segment .text
9 0001:0009C98C 10 0001:0009C99C 11 0001:0009C9A8 12 0001:0009C9C0
13 0001:0009C9CC
Bound resource files
d:\program files\borland\delphi7\Lib\Buttons.res
d:\program files\borland\delphi7\Lib\ExtDlgs.res
d:\program files\borland\delphi7\Lib\Controls.res
Unit1.dfm
Project1.res
Project1.drf
Program entry point at 0001:0009C98C
#11
存储空间不足时,看看是否是存储文件超限了
还有你那比较的时间间隔是怎么控制的?
还有你那比较的时间间隔是怎么控制的?
#12
是用的timer控件,每两秒截一个图片比较。还有个问题,用SCANLINE时能隔行比较吗?