这段清除历史记录代码为什么出错?

gxgxfish0813 2004-03-30 08:02:56
这段据说是书上的原码,第一次执行它时,没有什么错误,但连续第二次执行时,它就会死循环了。我看不懂这段代码,我估计是已经全清空了,所以目标为空,而只遇到
dwLastError = ERROR_NO_MORE_ITEMS时退出,好像错误信息不准确吧?谁能帮帮我呢
procedure DelHistory;
var
lpEntryInfo: PInternetCacheEntryInfo;
hCacheDir: LongWord ;
dwEntrySize, dwLastError: LongWord;
begin
dwEntrySize := 0;
FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize);
GetMem(lpEntryInfo, dwEntrySize);

hCacheDir := FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntrySize);
if hCacheDir <> 0 then
DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName);
FreeMem(lpEntryInfo);

repeat
dwEntrySize := 0;
FindNextUrlCacheEntry(hCacheDir, TInternetCacheEntryInfo(nil^),
dwEntrySize);
dwLastError := GetLastError();
if dwLastError = ERROR_INSUFFICIENT_BUFFER then //如果成功
begin
GetMem(lpEntryInfo, dwEntrySize); {分配dwEntrySize字节的内存}
if FindNextUrlCacheEntry(hCacheDir, lpEntryInfo^, dwEntrySize) then
DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName);
FreeMem(lpEntryInfo);
end;
until (dwLastError = ERROR_NO_MORE_ITEMS);
end;
...全文
71 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
whitetiger8 2004-04-01
  • 打赏
  • 举报
回复
把until (dwLastError = ERROR_NO_MORE_ITEMS);改成

until (dwLastError = ERROR_NO_MORE_ITEMS)or(dwLastError = ERROR_NO_MORE_FILES)
or (dwLastError = ERROR_INVALID_PARAMETER)
就可以了。你的条件表达式少写了一些,造成了死循环
zhanghongt 2004-03-31
  • 打赏
  • 举报
回复
UP UP





http://www.kan68.com/index3.htm?user=zhttz
gxgxfish0813 2004-03-31
  • 打赏
  • 举报
回复
xiangding(生下来就没明白:人活着的意义.....)
你的方法不行。也无法正确做出如果目标为空的处理。

zswangII(伴水清清)(一贴不灌,何以灌天下?)
你的方法我好像见过,不过IEHistory.ClearHistory;这句编译不过去。
gxgxfish0813 2004-03-31
  • 打赏
  • 举报
回复
不错不错。我试试啊。呵呵。谢谢。我感觉也是这么回事,就是没会。
zswangII 2004-03-30
  • 打赏
  • 举报
回复
//利用OLD对象~~
uses ComObj;

procedure ClearIEHistory;
const
CLSID_CURLHISTORY: TGUID = '{3C374A40-BAE4-11CF-BF7D-00AA006946EE}';
var
IEHistory: OleVariant;
begin
IEHistory := CreateComObject(CLSID_CURLHISTORY);
IEHistory.ClearHistory;
IEHistory := NULL;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
ClearIEHistory
end;
SuperSeventh 2004-03-30
  • 打赏
  • 举报
回复
学习
荣爵 2004-03-30
  • 打赏
  • 举报
回复
学习~~
太空11 2004-03-30
  • 打赏
  • 举报
回复
学习ing
xiangding 2004-03-30
  • 打赏
  • 举报
回复
FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize);
GetMem(lpEntryInfo, dwEntrySize);
如果第一次为空,
GetMem还有必要吗?
是不是这里要判断一下,
if FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize)=dwLastError then
exit;


5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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