我有一段代码,需要转换字符串为整形,并且设计了异常捕获:
    try
      uwDestAddr := StrToInt64(strCmdParam);
    except     //Cvt Addr Failed.
      ShowMessage('error addr');
      Exit;
    end;但是非常奇怪,strCmdParam是'asdf'一个异常字符串,但是运行时,捕获不到异常啊?F9后运行到这条语句,依然直接给出EXCEPTION的对话框,让我break。为什么我的except代码没有捕获到转换异常呢?哪位大侠指点一下,多谢。

解决方案 »

  1.   

    delphi调试状态是会显示具体的出错信息的,然后才执行
      except //Cvt Addr Failed.
      ShowMessage('error addr');//里面代码
      Exit;
    end;
    而在单独运行EXE时,则不显示具体出错信息只执行
      except //Cvt Addr Failed.
      ShowMessage('error addr');//里面代码
      Exit;
    end;
      

  2.   

    不可能,不管调试或者是运行exe
    只要转换不成功,都会执行ShowMessage,LZ遇到鬼了?
      

  3.   

    var
      i:integer;
    begin
    try
     i:=strtoint64('asdf');
     except
       ShowMessage('error');
     end;
    end;
    调试完全无压力,检查下你的strtoint64代码是不是被改动过,另外重新编译下工程
      

  4.   

    依然直接给出EXCEPTION的对话框是,点"确定"然后再按一下F9试试
      

  5.   

    我的代码里也有一些自己写的代码产生异常的,这些就可以正常捕获;单步时,可以跳到exception来执行。但是调用strtoint()之类的系统函数产生的异常,我的代码单步执行时,就是跳不到except里。网上也搜了一些解释,说是调用系统函数产生的异常,单步时,的确捕获不到,但是直接执行exe时,代码是可以正常捕获的。我试了一下,的确是这样,如果单纯执行exe文件,则的确到了我的except里,但是单步时,的确不行。也许真的是不能捕获系统函数产生的异常吧。
      

  6.   

    我在XE里是不行的。发生异常后,跳出系统的异常对话框,问我是break,还是continue,无论我点break还是continue,都不会跳到我的except代码那里。
      

  7.   

    出现系统的错误提示后,继续往下执行啊,按F7,F8,F9都行
      

  8.   

    用 StrToIntDef(strCmdParam,-1) 得了 
    不过 错误返回值 设置 -1 注意下就行 不要和正确值冲突 
      

  9.   

    这是正常的啊。没什么奇怪的。除非你叫Delphi公司改下……可惜,Delphi7没人管了