Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Win32FindData ! [D6, WinXP]


psa247 ©   (2005-12-19 15:33:00) 

Подскажите, как правильно закрыть хэндл ?

function TF.Get_File_size(name : string): INT64;
var FD : TWin32FindData;
  FH : THandle;
begin
  EUID:= '{D39E438C-1C08-4D27-9039-FE781A512700}';
  Result:= -1;
  FH:= FindFirstFile(PChar(name), FD);
  if FH = INVALID_HANDLE_VALUE then exit;
  try
    Result:= FD.nFileSizeHigh;
    Result:= Result shl 32;
    Result:= Result + FD.nFileSizeLow;
finally
  try
  FindClose(FH);
  //CloseHandle(FH);
  except
  ShowMessage(SysErrorMessage(GetLastError));
  end;
  end;
end;


GetLastError дает 0


psa247   (2005-12-19 15:52:00) [1]

Ёлы-палы... :)


> begin...end ©

Спасибо.


begin...end   (2005-12-19 15:45:00) [2]

> psa247 ©   (19.12.05 15:43) [3]

Это потому, что вызывается FindClose из SysUtils, а здесь нужно Windows.FindClose(FH).


psa247   (2005-12-19 15:43:00) [3]


> begin...end ©

На FindClose пишет, что параметры не идентичны.


begin...end   (2005-12-19 15:40:00) [4]

CloseHandle здесь не нужно. Нужно только FindClose.

> Result:= FD.nFileSizeHigh;
> Result:= Result shl 32;
> Result:= Result + FD.nFileSizeLow;

Int64Rec(Result).Lo := FD.nFileSizeLow;
Int64Rec(Result).Hi := FD.nFileSizeHigh;

Так красивее, ИМХО.


psa247   (2005-12-19 15:35:00) [5]

Забыл: CloseHandle дает External exception C0000008


Наверх

Титульная страница Поиск, карта сайта Написать письмо