program Project1;uses
  windows;begin
  try
    asm
        int  3
    end;
  except
    messagebox(0, 'Got interrupt point', '', MB_OK);
  end;
end.运行程序(不要在IDE环境下运行)windows弹出“发送错误报告”对话框,点不发送后弹出“runtime error 255”错,except部分根本就没有执行,这是怎么回事?

解决方案 »

  1.   

    可能是那句MessageBox引起的,
    我加了一句uses SysUtils;就没出错了。
      

  2.   

    不是Messagebox问题。 估计就是因为SysUtils。
    由于特殊需求,不能uses SysUtils(原因很简单,这玩艺太大了)。 现在的问题就变成如何在不加载SysUtils的情况下使用try...except? 我尝试过设置system中的ExceptProc和ErrorProc,结果都不起作用(这点比较奇怪,SysUtils的Initialization部分也不过就是设置了这几个变量把它指向SysUtils中的异常处理模块而已,为什么到我这就不行了呢?)。 难道一定要自己用汇编来处理SEH?
      

  3.   

    好像在超级猛料还是哪里看过,说如果不用SysUtils就没办法捕捉异常
      

  4.   

    ExceptionHierarchy Properties Methods
    ----------------------------------------------------
    Exception is the base class for all runtime exceptions.Unitsysutils
      

  5.   

    不加载sysutils捕捉异常是肯定可以的, 大致代码如下:
    ...
    asm
      push ExceptHandle       // excepthandle 就是异常处理函数
      push dword ptr fs:[0]
      mov  fs:[0], esp
    end;
    ...    // 要try的代码
    ...
    asm
      pop eax
      mov fs:[0], eax
      pop eax
    end;
    ...function ExceptionHandle(ExceptRecord, ExceptPoint, ExceptContext, Param: Pointer): Cardinal; stdcall; 
    begin      
      { 异常处理函数,具体结构可以参阅MSN有关SEH的说明 }
    end;我想知道的就是如何仍然利用Delphi的关键字try...except来使用异常而不用写一堆汇编代码。
      

  6.   

    int 3 ???
    你想直接跳入中断? 这样出错,感觉才合理, 系统级的错误了
      

  7.   

    Int 3是Debug中断
    在程序被Debug的时候是会通知调试器的不带SysUtils,就得自己处理SEH哦