Вниз
Скачать: CL | DM;

try except...   Найти похожие ветки 

← →
Unknown user ©   (2004-11-26 14:46) [0]

Ув. Мастера, граммотно ли я использую конструкцию 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) [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.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.024 c
3-1102845941
able
2004-12-12 13:05
2005.01.16
Вручную перебирать БД...


1-1104405090
AHTuXPuCT
2004-12-30 14:11
2005.01.16
Проблемы с явной загрузкой библиотеки


6-1096741145
Ezhik
2004-10-02 22:19
2005.01.16
Server and Client Socket


3-1102591130
Guitar
2004-12-09 14:18
2005.01.16
Ошибка при создании файла UDL


1-1103893332
MAINUSER
2004-12-24 16:02
2005.01.16
Ошибочка вышла




   Наверх