这段据说是书上的原码,第一次执行它时,没有什么错误,但连续第二次执行时,它就会死循环了。我看不懂这段代码,我估计是已经全清空了,所以目标为空,而只遇到
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;
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;
GetMem(lpEntryInfo, dwEntrySize);
如果第一次为空,
GetMem还有必要吗?
是不是这里要判断一下,
if FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize)=dwLastError then
exit;
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;
你的方法不行。也无法正确做出如果目标为空的处理。zswangII(伴水清清)(一贴不灌,何以灌天下?)
你的方法我好像见过,不过IEHistory.ClearHistory;这句编译不过去。
or (dwLastError = ERROR_INVALID_PARAMETER)
就可以了。你的条件表达式少写了一些,造成了死循环