所产生的意外情况为c00000fd,在地址7C821AOB(kernel32!GetTickCount)处delphi5开发,偶尔才会报错,不知道遇到什么情况才报

解决方案 »

  1.   

    GetTickCount不会作系统调用,直接从进程的内存中取一个值返回给程序,因此,出错的原因,很可能是被Hook了
      

  2.   

    偶尔出错,绝大多数正常的话,用以下这个方法应急for i:=1 to 10000 do begin
      try
        xx := GetTickCount();
        Break;
      except
      end;
    end;
    其实应该恢复GetTickCount函数头5或者6个字节,以及恢复跳转表地址,来让Hook失效.
      

  3.   

    但是我没有调用GetTickCount函数,是通讯的时候,应该是系统自动调用了这个函数,在事件查看器里看到报的这个错误是   try
            RecStream := TWinSocketStream.Create(csSocket.Socket, iWaitTime*1000);
            try
              FillChar(cRecBufs, iRecLen + 1, 0);
              if RecStream.WaitForData(iWaitTime* 1000) then
              begin
                result := BR_RECEIVE_FAILED;            .....
       这段代码可能是调用了那个函数,收报文的时候,那怎么解决啊?
      

  4.   

    没有调试,每天都会出现,但是测试的时候很难出现,只有当生产的时候,会出现2-3次,应用会死掉,然后在事件查看器下就会看到这个报错,但最郁闷的是应用捕获不到这个错。换过机器,但是换过机器报错也不是这个错了又,报这个错的机器是一台服务器,且是window2003的系统。
      

  5.   

    应该是野指针访问问题。
    重编一个带有调试信息的程序,加上TJvDebugHandler或Eurekalog或其它类似栈信息输出工具,记录出错时的栈调用信息。这样可方便追踪错误根源。