怎样忽略掉这个系统级错误??

天_天天蓝 2003-05-29 02:01:39
我编写了一个作为IE浏览器的扩展的程序,发布的方式肯定是DLL形式的COM,但是,某一句程序代码如下:

Str1:=IEBrowser.Body.InnerText;

其目的是取目前网页的文本,这句代码在访问一张网页时不会出问题,但是,在同时访问多张页面的时候就由于内存此时暂时锁定了IEBrowser.Body.InnerText,
所以,就会出现操作系统中的错误C0000005——内存访问冲突。以致在IE浏览器下显示为:一个非法操作错误框,我试过TRY的所有方法,但是,由于在DELPHI中不能捕获
这个错误,所以,怎么也不能忽略过去该错误。

现在,我要解决的问题,由于这句话是在某个循环中,所以,要求,能访问该内存的时候就访问,不能访问的时候就忽略掉,而继续下一次循环,而不致于在IE浏览器中弹出非法操作的提示框。

有的人向我提出用SetUnhandledExceptionFilter的办法,我觉得应该不会这么小题大作吧?

致礼且期盼回音!
...全文
20 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
天_天天蓝 2003-06-13
  • 打赏
  • 举报
回复
我想请教一下,这样改就解决了的道理是什么呢??????
awhitefox 2003-06-10
  • 打赏
  • 举报
回复
why?
awhitefox 2003-06-10
  • 打赏
  • 举报
回复
但是把strlst: TStringList声明的地方改一下就可以捕获了

var
strlist : TStringList;

procedure TForm1.Button1Click(Sender: TObject);
var
//strlist : TStringList;
str : string;
begin
try
str := strlist.Text;
except
on E:Exception do
showMessage(E.Message);
end;

end;
Means_pan 2003-06-03
  • 打赏
  • 举报
回复
try
代码
except
异常处理
end;
天_天天蓝 2003-06-03
  • 打赏
  • 举报
回复
我试过,这样也不行:
Button1Click(Object: TObject);
var strlst: TStringList;
str:String;
begin
try
str:=strlist.Text;//故意不创建TStringList的实例。
except
raise EAccessViolation.Create('Error');
end;
end;

Delphi好像根本就捕获不了这个错误,其结果,根本就没有进行错误处理的余地。
天_天天蓝 2003-06-03
  • 打赏
  • 举报
回复
这三种方法我都试过,不行的。

大家可以试一下:
如:
Button1Click(Object: TObject);
var strlst: TStringList;
str:String;
begin
try
str:=strlist.Text;//故意不创建TStringList的实例。
except
ShowMessage('FindError');
end;
这端程序编译成为EXE以后运行并不像我们想象的那样显示提示框,而是直接退出了程序。
end;
gardenyang 2003-06-01
  • 打赏
  • 举报
回复
检查原生类是不是没有甩出错误raise
try
except
raise;//这句话是不是没有
end;
Eastunfail 2003-06-01
  • 打赏
  • 举报
回复
使用那之前,用

If Assigned(IEBrowser.Body)=true then ......

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧