请问DELPHI中如何捕捉所有的异常? 把程序改为 try ...... finally .... end; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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; 用try是不行的,楼上说的对. 我试过了,还是不行。也许Activex Exe和普通应用程序不一样?还有没有其他办法? 哦,你说的是ActiveX,是DLL,我那里的是Forms.Application你看看是不是指针操作出了问题,或是对象Free后又去引用,或者多次调用对象的Free过程,就会出现这个错。情况多多,一般去调试Destroy那部分的代码 提示1:try...except使用的是Delphi的异常机制,捕捉Delphi封装之后的异常。提示2:Delphi为你做了很多后台的工作,你的try...except是否把这部分代码也包含进去了?如果只包含了自己写的代码,可能还是无法捕捉到错误的。ActiveX Exe的启动代码在哪里?(我自己并不懂ActiveX Exe,只是推测上述地方可能造成问题) 是EXE出错原因大概是那样的,不过因为activex不太好调试,看代码一时也看不出错在那里,想先加个捕捉的,调试起来也方便些。 启动代码: Application.Initialize; Application.CreateForm(TFormMain, FormMain); Application.Run;我把这些全包含进去了。另外Application.OnException 我放在TFormMain.FormCreate(...)里,是不是正确的? 估计是在activex destroy的时候出的错,但是在调试状态下,调用activex的程序结束时,activex exe并不会结束,也就是说不会调用destroy代码。所以我也不知道该怎么调试? 我有一套完整的BDE和WIN32异常类的信息处理组件,可根据错误号码,返回中文的提示信息! madyak(下岗的程序员),能不能给我发一份作参考?[email protected] ActiveX.exe中的错误/异常,调用者似乎捕捉不到的。因为根据COM规范,异常不能跨过COM接口。问题就是COM服务器如何返回错误而已。也许是COM服务器本身没能捕捉和处理异常造成的。 to agui:可我现在就是在Activex Exe中捕捉呀? delphi XE中如何单步调试?设置的断点无效。 delphi7中自带的TWebBrowser控件调用的IE内核是本机的吗? 图片合并问题,急!!!!!! 深圳Delphi求职者,请进入! dbgrid问题 很少接触链表,关于整个链表释放问题,在线等 郁闷,散分!第一个来全给! delphi中实现ocx插件在IE中全屏显示,如何实现 关于COM的两个问题? DELPHI的比较好的下载的网站? 怎样才能使装98的机器能访问局域网中安装2000的机器上的共享文件? 各位大哥,如何判断一个edit输入的内容是否为合法的数字类型,有类似函数么?
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:Delphi为你做了很多后台的工作,你的try...except是否把这部分代码也包含进去了?如果只包含了自己写的代码,可能还是无法捕捉到错误的。ActiveX Exe的启动代码在哪里?(我自己并不懂ActiveX Exe,只是推测上述地方可能造成问题)
出错原因大概是那样的,不过因为activex不太好调试,看代码一时也看不出错在那里,想先加个捕捉的,调试起来也方便些。
Application.Initialize;
Application.CreateForm(TFormMain, FormMain);
Application.Run;
我把这些全包含进去了。另外Application.OnException 我放在TFormMain.FormCreate(...)里,是不是正确的?
[email protected]
可我现在就是在Activex Exe中捕捉呀?