![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
try except... [D5, Win2k]
Unknown user © (2004-11-26 14:46:00)Ув. Мастера, граммотно ли я использую конструкцию try except, если нет то как лучше поступить в данном случае?
try
if Mode=fmCreate then begin
F:=CreateFile(PChar(FileName),GENERIC_READ and GENERIC_WRITE,
0,nil,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
FHandle:=CreateFileMapping(F,nil,PAGE_READWRITE,0,0,nil);
FView:=MapViewOfFile(FHandle,FILE_MAP_WRITE,0,0,0);
end else begin
F:=CreateFile(PChar(FileName),GENERIC_READ,
FILE_SHARE_READ,nil,OPEN_EXISTING,0,0);
FHandle:=CreateFileMapping(F,nil,PAGE_READONLY,0,0,nil);
FView:=MapViewOfFile(FHandle,FILE_MAP_READ,0,0,0);
end;
if (F<0) or (FHandle=0) or (FView=nil) then
if Mode=fmCreate
then raise EFCreateError.CreateResFmt(@SFCreateError,[FileName])
else raise EFOpenError.CreateResFmt(@SFOpenError,[FileName]);
except
if FView<>nil then UnmapViewOfFile(V);
if FHandle<>0 then CloseHandle(FHandle);
FView:=nil;
FHandle:=0
end;
Leonid Troyanovsky (2004-11-26 15:36:00) [1]
> Unknown user © (26.11.04 14:46)
> Ув. Мастера, граммотно ли я использую конструкцию try except,
> если нет то как лучше поступить в данном случае?
> if ( F<0) or (FHandle=0) or (FView=nil) then
Лучше пользовать константу, INVALID_HANDLE_VALUE.
А так, в общем-то, правдоподобно.
Хотя, проще делать примерно так:
try
FHandle := CreateFile
Win32Check(FHandle <> INVALID_HANDLE_VALUE);
..
finally
if FHandle <> INVALID_HANDLE_VALUE then
CloseHandle(FHandle);
..
end;
Более дружественные сообщения можно получать в
обработчике исключений на уровень выше.
--
С уважением, LVT.