OpenFile, GetFileTime i AccessViolation

0

Napisałem sobie prosty kod do zmiany daty pliku.

var
  Time1, Time2, Time3 : PFileTime;
  ofs : _OFSTRUCT;
  hFile : THandle;
begin
  if OpenDialog1.Execute then
  begin
    hFile := OpenFile('C:\test.txt', ofs, OF_READWRITE);
    if hFile = HFILE_ERROR then MessageBeep(0) else
      GetFileTime(hFile, @Time1, @Time2, @Time3);
    CloseHandle(hFile);

    hFile := OpenFile(PChar(OpenDialog1.FileName), ofs, OF_READWRITE);
    if hFile = HFILE_ERROR then MessageBeep(0) else
      SetFileTime(hFile, @Time1, @Time2, @Time3);
    CloseHandle(hFile);
  end;
end;

Kod działa poprawnie, tyle że po zakończeniu procedury program wysypuje się na AccesViolation. Pokazuje mi się okno CPU i poświetla się linijka z "pop ebp", znajdująca się w kodzie proceduty TControl.WndProc. Co jest nie tak ?

[dopisane]
Wielki dzięki, rzeczywiscie nie pomyślałem :) .

0

Tak sie nie wysypuje

var
  Time1, Time2, Time3 : TFileTime;
  ofs : TOFSTRUCT;//to bo ladniej i ic wiecej !
  hFile : THandle;
begin
  if OpenDialog1.Execute then
  begin
    hFile := OpenFile('C:\test.txt', ofs, OF_READWRITE);
    if hFile = HFILE_ERROR then MessageBeep(0) else
      GetFileTime(hFile, @Time1, @Time2, @Time3);///tu byly adresy do adresow !
    CloseHandle(hFile);

    hFile := OpenFile(PChar(OpenDialog1.FileName), ofs, OF_READWRITE);
    if hFile = HFILE_ERROR then MessageBeep(0) else
      SetFileTime(hFile, @Time1, @Time2, @Time3);
    CloseHandle(hFile);
  end;
end;

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