Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Speicher u. Handle Fehler beim löschen von Cookies,Verlauf (https://www.delphipraxis.net/27504-speicher-u-handle-fehler-beim-loeschen-von-cookies-verlauf.html)

HomerGER 11. Aug 2004 10:00


Speicher u. Handle Fehler beim löschen von Cookies,Verlauf
 
Hallo
Ich nutze den Code aus der Code-Library um Cookies, Verläufe usw zu löschen
Delphi-Quellcode:
uses
  WinInet;

[...]

procedure TForm1.Cookies1Click(Sender: TObject);

var
  icei    : PINTERNETCACHEENTRYINFO;
  dwSize  : DWord;
  hSearch : DWord;

begin
  CheckListBox1.Items.BeginUpdate;
  CheckListBox1.Items.Clear;
  dwSize := 65536;
  icei   := AllocMem(dwSize);
  try
    hSearch := FindFirstURLCacheEntry('visited:',icei^,dwSize);
    if hSearch = 0 then
    begin
      ShowMessage(SysErrorMessage(GetLastError)+' '+IntToStr(dwSize));
      exit;
    end;
    while hSearch <> 0 do
    begin
      Application.ProcessMessages;
      CheckListBox1.Items.Add(icei^.lpszSourceUrlName);
      dwSize := 65536;
      if not FindNextURLCacheEntry(hSearch,icei^,dwSize) then
      begin
        hSearch := 0;
      end;
    end;
  finally
    FreeMem(icei,65536);
    CheckListBox1.Items.EndUpdate;
  end;
end;


procedure TForm1.Lschen1Click(Sender: TObject);

var
  i : integer;

begin
  for i := 0 to CheckListBox1.Items.Count-1 do
  begin
    if CheckListBox1.Checked[i] then
    begin
      DeleteURLCacheEntry(PChar(CheckListBox1.Items[i]));
    end;
  end;
  Cookies1.Click;
end;
Wenn aber (wie ich glaube) sehr viele Cookies, Verläufe usw vorhanden sind
kommt die Fehlermeldung Systemressourcen erschöft, falscher Parameter und Handle falsch

liegt das jetzt an dwSize := 65536 ist der zu klein bemessen?
muß ich den grösser setzen oder kann ich ihn so setzen das er sich nimmt was er braucht.
Oder wie gross darf der den max. sein?

Homer

Christian Seehase 11. Aug 2004 15:04

Re: Speicher u. Handle Fehler beim löschen von Cookies,Verla
 
Moin Homer,

wird dieses ShowMessage ausgeführt:

Delphi-Quellcode:
    if hSearch = 0 then
    begin
      ShowMessage(SysErrorMessage(GetLastError)+' '+IntToStr(dwSize));
      exit;
    end;
wenn nicht, dürfte eigentlich kein Fehler vorliegen.

HomerGER 11. Aug 2004 20:11

Re: Speicher u. Handle Fehler beim löschen von Cookies,Verla
 
nein wird nicht ausgeführt

Wie oben aber beschrieben - bei so 500-1000 Dateien kein Problem aber bei mehr kommt die Fehlermeldung

oder wie ich meine wenn ich es 2-3 durchlaufen laße

Aber hier mein Code nochmal - womöglich hab ich ja hier irgendwoein Fehler drin
Delphi-Quellcode:
//IE URLHistoryCache lesen Verläufe
Procedure IECache_URLHistory_Lesen_IECU();
var
ie_cache : PINTERNETCACHEENTRYINFO;
size_dw : DWord;
cache_dir_dw : DWord;
icon_list_il : HImageList;
list_item_li : TListItem;
file_info_fi : TSHFileInfo;
begin
    //Icon laden
    //Haupt_Form.Wartung_Temp_ImageList1.Clear;
    icon_list_il := HImageList(SHGetFileInfo('', 0, file_info_fi, SizeOf(file_info_fi), SHGFI_SYSICONINDEX or SHGFI_ICON));

    if (icon_list_il <> 0) then
    begin
        Haupt_Form.Icon_Cache_ImageList1.Handle := icon_list_il;
        Haupt_Form.Icon_Cache_ImageList1.Height := 16;
        Haupt_Form.Icon_Cache_ImageList1.Width := 16;
    end;

    //Alles löschen
    Haupt_Form.Wartung_ListView11.Items.Clear;

    size_dw := 65536;
    ie_cache   := AllocMem(size_dw);

    try
        cache_dir_dw := FindFirstUrlCacheEntry(NIL, ie_cache^,size_dw);

        while cache_dir_dw <> 0 do
        begin
            Application.ProcessMessages;

            if ((ie_cache^.CacheEntryType AND URLHISTORY_CACHE_ENTRY) = URLHISTORY_CACHE_ENTRY) then
            begin
                //Name
                list_item_li := Haupt_Form.Wartung_ListView11.Items.Add;
                list_item_li.Caption := ie_cache^.lpszSourceUrlName;

                //Icon
                Haupt_Form.Wartung_ListView11.SmallImages.Handle := SHGetFileInfo(ie_cache^.lpszLocalFileName, 0, file_info_fi, SizeOf(file_info_fi), SHGFI_SYSICONINDEX or SHGFI_ICON);
                list_item_li.ImageIndex := file_info_fi.iIcon;

                 //File Anzahl
                Haupt_Form.Wartung_Label10.Caption := IntToStr(list_item_li.Index + 1);

                //Suche Abbrechen
                If (g_flag_b = True) then
                begin
                    g_flag_b := False;
                    Break;
                end;
            end;

            size_dw := 65536;

            if not FindNextURLCacheEntry(cache_dir_dw,ie_cache^,size_dw) then
            begin
                cache_dir_dw := 0;
            end;
        end;
    finally
        FreeMem(ie_cache,65536);
    end;
end;

Christian Seehase 12. Aug 2004 17:49

Re: Speicher u. Handle Fehler beim löschen von Cookies,Verla
 
Moin Homer,

eine Idee, hätte ich noch dazu.
Deaktiviere mal, testeshalber, alle Zeilen, die sich auf die Icons beziehen.
Ich habe so den Verdacht, dass es damit zu tun hat.

Ausserdem noch etwas allgemeines:
Eine boolsche Variable sollte man nicht direkt auf true/false prüfen:

Delphi-Quellcode:
If (g_flag_b = True) then
schreib besser

Delphi-Quellcode:
If g_flag_b then

HomerGER 12. Aug 2004 18:18

Re: Speicher u. Handle Fehler beim löschen von Cookies,Verla
 
Hallo
Warum nicht direkt?
Werde aber als erstes mal alles mit Icon raus nehmen

Thx

HomerGER 14. Aug 2004 15:58

Re: Speicher u. Handle Fehler beim löschen von Cookies,Verla
 
Habe alles mit Icon raus genommen, läuft soweit
gibt es ne möglichkeit es drin zu lassen
wenn ich size_dw := 65536 erhöhe?

Christian Seehase 14. Aug 2004 18:11

Re: Speicher u. Handle Fehler beim löschen von Cookies,Verla
 
Moin Homer,

meine Idee war, dass die Be-/Verarbeitung der Cache Einträge nicht den Fehler verursachen, sondern dass dieser durch die SHGetFileInfo Verwendung hervorgerufen wird, was ja Deine Aussage dann auch bestätigt hat.

Da ja FindFirstURLCacheEntry keinen Fehler zurückgeliefert hat, wird auch die Veränderung der Buffergrösse nichts bewirken.
Wo jetzt der Kinken bei SHGetFileInfo usw. ist habe ich aber noch nicht raus.
Zumindest sieht es doch sehr danach aus, als würde hier die Ursache zu suchen sein.


BTW:
Üblicherweise sollte man boolsche Variablen so benennen, das ihre Bedeutung in einer Abfrage ohne direkten Vergleich ersichtlich wird, da es die Lesbarkeit erhöht.
Für = false schreibt man ja auch "not Variablenname then"

SirThornberry 1. Nov 2006 12:37

Re: Speicher u. Handle Fehler beim löschen von Cookies,Verla
 
Was mir bei dem Source noch aufgefallen ist (oder ich habs übersehen): Es fehlt FindCloseUrlCache


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz