怎样屏蔽操作系统提示的错误(200分)

  • 主题发起人 主题发起人 gaoqiang
  • 开始时间 开始时间
G

gaoqiang

Unregistered / Unconfirmed
GUEST, unregistred user!
程序运行时,OS有时会弹出差错误信息,如非法访问了某段内存。但是有时这种错是
无关痛痒的,怎样屏蔽。在下谢了先!!!
 
试试SetErrorMode(SEM_NOGPFAULTERRORBOX)这样的语句。
具体的参数再查一下SetErrorMode的API说明。
 
程序运行时,OS有时会弹出差错误信息,如非法访问了某段内存。但是有时这种错是
无关痛痒的,怎样屏蔽

----太轻描淡写了吧.
把OS都搞得报错了还无关痛痒?
还是仔细查查你的程序吧, 比如释放了已经被释放的内存.
或者用其它方式访问已经被释放的内存等等.

估计十有八九不是"程序运行时", 而是程序退出时,所以你才不当一回事.(要查)

TO DQ:
你这不是诲淫诲盗吗:)
 
笑傲江湖
 
to 笑傲江湖:
呵呵,的确有此嫌疑。不过我是就事论事嘛,SetErrorMode也确实有该用的时候。

比如在软驱里没有软盘的时候对A盘进行文件读写操作会出现系统提示,
如果是在Win31下,就可以用SetErrorMode避免这个提示而自己处理。
(当时是别人问我怎么解决这个问题的时候我想到的SetErrorMode;
我自己也没在Win31下用过,刚才在Win98下试了一下,好象又不行;
不知道是不是还和操作系统有关。用try就可以了。)
 
请继续或结束
 
to gaoqiang
关键在于捕捉程序中出现的意想不到的错误。下面的代码对你有帮助,我在NT,2000,98
下均使用通过,试一试吧,如果想彻底屏蔽,就对错误处理过程不做任何处理即可。
program Project1;

uses
sysutils,
dialogs,
Forms,
windows,
Unit1 in 'Unit1.pas' {Form1};

type
tglobalexhandler=class
public
procedure handleproc(sender:tobject;einstance:exception);
end;

procedure tglobalexhandler.handleproc(sender:tobject;einstance:exception);
var lasterror:integer;
begin
lasterror:=getlasterror;
if lasterror=ERROR_NOT_READY then messagedlg('驱动器尚未准备好',mterror,[mbok],0)
else messagedlg('出现无法处理的错误,'+#10#13+'错误代码为:'+inttostr(lasterror)+'是否中断程序',mterror,[mbyes,mbno],0)=idyes then application.Terminate;
end;

var
globalexhandler:tglobalexhandler;

{$R *.RES}

begin
globalexhandler:=tglobalexhandler.Create;
application.OnException:=globalexhandler.handleproc;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
to 笑傲江湖:
谁能保证一个程序中不出任何错误,特别是自动通讯程序,如果因为某个异常没有及时
处理,导致整个系统崩溃,那还了得,特别是某些异常无法预见的,比如通讯线路故障,
这种异常捕捉到就释放,等待下一次通讯握手,这是最有效的解决方法。
 
接受答案了.
 

Similar threads

后退
顶部