Indy HTTP - Błąd pamięci.

0

Witam. Mam problem z komponentem indy http. Mój problem polega na tym, że przy ponownym wywołaniu komponentu program wywala błąd "Access violation at address 004C9450 at module 'Project1.exe'. Read of address 00000118." Wszystko działa jak należy przy pierwszym wywołaniu a przy następnym za każdym razem otrzymuję taki błąd. Jak uniknąć tego błędu?

0

Oto kod:

function CheckUpdates(auto : boolean = false) : boolean;
var
  exename : string;
  dlfile : TFileStream;
  ini : TIniFile;
  vminor : integer;
  vmajor : integer;
  vlink : string;
begin
exename := extractFileName(Application.ExeName);
if fileexists(ExtractFilePath(ParamStr(0)) + 'update.exe') then
begin
    dlfile := TFileStream.Create(ExtractFilePath(ParamStr(0)) + 'version.ini', fmcreate);
    main.idhttp1.Request.UserAgent := 'Mozilla/4.0, Indy Library (Windows; en-US)';
    main.idhttp1.Get('http://10.10.1.12/version.ini',dlfile);
    main.IdHttp1.Free;
    dlfile.Free;
    if FileExists(ExtractFilePath(ParamStr(0)) + 'version.ini') then
    begin
        ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'version.ini');
        try
          vminor := StrToInt(ini.ReadString('VERSION', 'MINOR', IntToStr(minor)));
          vmajor := StrToInt(ini.ReadString('VERSION', 'MAJOR', IntToStr(major)));
          vlink := ini.ReadString('UPDATE', 'LINK', '');
          if (vminor > minor) or (vmajor > major) then
          begin
          ShowMessage(Application.Title);
              case Application.MessageBox('Dostępna jest nowa wersja programu.'+#13+'Czy chcesz dokonać aktualizacji?', 'Aktualizacja', MB_YESNO+MB_ICONQuestion) of
                  IDYES: ShellExecute(0, 'open', 'update.exe', PChar(vlink + ' ' + exename + ' "' + Application.Title + '"'), nil, SW_SHOWNORMAL)
              end;
          end else
              if auto then
              Application.MessageBox('Brak dostępnych aktualizacji.', 'Aktualizacja', MB_OK+MB_ICONInformation);

          DeleteFile(ExtractFilePath(ParamStr(0)) + 'version.ini');
        finally
            ini.Free;
        end;
    end else
        if auto then
        Application.MessageBox('Brak dostępnych aktualizacji.', 'Aktualizacja', MB_OK+MB_ICONInformation);
end else
Application.MessageBox('Wystąpił błąd podczas sprawdzania dostępności aktualizacji!'+#13+'Ponowna instalacja programu powinna rozwiązać ten problem.', 'Aktualizacja', MB_OK+MB_ICONError);
end;
1

Zwalniasz komponent IdHttp1, a przed kolejnym skorzystaniem z tej funkcji zapewne zapominasz o jego utworzeniu. Poza tym ten kod jest fatalny.

0

Fatalny czy nie do poznania języka jak najbardziej wystarczy. Dzięki za pomoc. Miłej nocy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1