把程序改为
  try
     ......
  finally
     ....
  end;

解决方案 »

  1.   

    procedure TMainForm.FormCreate(Sender: TObject);
    begin
      Application.OnException := ApplicationException;
      Application.Title := Caption;
      ShortDateFormat := 'yyyy-MM-dd';
    end;procedure TMainForm.ApplicationException(Sender: TObject; E: Exception);
    const
      LogFormat = 'Exception ClassName: %s, Message: %s';
    var
      S: string;
      W: WideString;
    begin
      with E do
      begin
        S := Message;
        W := WideString(Message);
        //自已写个函数,记录到log文件
        AppendLog(Format(LogFormat, [ClassName, S]));
      {$IFNDEF _DEBUG}
        if Length(S) <> Length(W) then      { 中文异常信息 }
          Application.ShowException(E)
        else                                { 英文异常信息 }
          Application.MessageBox('操作出现未知的错误,中止!', '错误',
            MB_OK + MB_ICONERROR);
      {$ELSE}      { 调试状态,全部信息 }
        Application.ShowException(E)
      {$ENDIF}
      end;
    end;
      

  2.   

    用try是不行的,楼上说的对.
      

  3.   

    我试过了,还是不行。也许Activex Exe和普通应用程序不一样?
    还有没有其他办法?
      

  4.   

    哦,你说的是ActiveX,是DLL,我那里的是Forms.Application你看看是不是指针操作出了问题,或是对象Free后又去引用,或者多次调用对象的Free过程,就会出现这个错。情况多多,一般去调试Destroy那部分的代码
      

  5.   

    提示1:try...except使用的是Delphi的异常机制,捕捉Delphi封装之后的异常。
    提示2:Delphi为你做了很多后台的工作,你的try...except是否把这部分代码也包含进去了?如果只包含了自己写的代码,可能还是无法捕捉到错误的。ActiveX Exe的启动代码在哪里?(我自己并不懂ActiveX Exe,只是推测上述地方可能造成问题)
      

  6.   

    是EXE
    出错原因大概是那样的,不过因为activex不太好调试,看代码一时也看不出错在那里,想先加个捕捉的,调试起来也方便些。
      

  7.   

    启动代码:
      Application.Initialize;
      Application.CreateForm(TFormMain, FormMain);
      Application.Run;
    我把这些全包含进去了。另外Application.OnException 我放在TFormMain.FormCreate(...)里,是不是正确的?
      

  8.   

    估计是在activex destroy的时候出的错,但是在调试状态下,调用activex的程序结束时,activex exe并不会结束,也就是说不会调用destroy代码。所以我也不知道该怎么调试?
      

  9.   

    我有一套完整的BDE和WIN32异常类的信息处理组件,可根据错误号码,返回中文的提示信息!
      

  10.   

    madyak(下岗的程序员),能不能给我发一份作参考?
    [email protected]
      

  11.   

    ActiveX.exe中的错误/异常,调用者似乎捕捉不到的。因为根据COM规范,异常不能跨过COM接口。问题就是COM服务器如何返回错误而已。也许是COM服务器本身没能捕捉和处理异常造成的。
      

  12.   

    to agui:
    可我现在就是在Activex Exe中捕捉呀?