接管整个应用程序的写法是这样的:application.OnException := MyException有没有办法截获当前窗体抛出的异常?

解决方案 »

  1.   

    窗体没有直接的OnException事件,只能按过程/函数自行try..except
      

  2.   


     这个是 Application的。  你可以在写入的时候, 判断下 ActiveForm
      

  3.   

    接管窗体的OnException是无法实现的,你接管Application.OnException是因为发生异常就会触发哪个事件,而且从技术上来说,也无法判断发生的异常是属于哪个窗体的。
      

  4.   

    有一个解决办法就是得到发生异常的类名,参考一下FastMM抓异常的代码,首先是抓到出异常的堆栈,获取堆栈异常地址的代码是:procedure GetStackAddress(var AStackTop, AStackBottom: Cardinal);
    begin
      asm
        mov ecx, FS:[4];  //FS:[4]放置发生异常时的栈信息
        sub ecx, 3;
        mov [eax], eax;   //栈顶,eax接收第一个参数
        mov [edx], ebp;   //栈低,edx接收第二个参数
      end;
    end;具体的可以参考FastMM