![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Здравствуйте!
Научите пожалуйста как правильно организовать исключения на примере следующей функции: Код:
function ExtractRes(ResType, ResName, ResNewName : String):Boolean; var Res: TResourceStream; begin Result:= False; Res:=TResourceStream.Create(Hinstance, Resname, Pchar(ResType)); Res.SavetoFile(ResNewName); if FileExists(ResNewName) then Result:= True else Result:= False; Res.Free; end; Проблема в том, что в случае если не получается сохранить ресурс программа выдает соответствующее сообщение и после чего дальнейший код не выполняется... а мне нужно вывести сообщение об этом, допустим: Код:
if ExtractRes('EXEFILE','program', GetTempDir+'program.exe') then
RichEdit.Text:= 'Файл распакован.'
else
RichEdit.Text:= 'Файл НЕ распакован.';В моем случае, если происходит ошибка распаковки ресурса то дальнейший код не выполняется... т.е. сообщения "Файл НЕ распакован." не видно... Помогите грамотно переделать функцию пожалуйста. Буду вам очень признателен. |
|
#2
|
||||
|
||||
|
Если дело в эксепшене, то наверное как-то так.
Код:
try // unpack code Res.Free; except Res.Free; Result := false; end; Последний раз редактировалось Bargest, 31.05.2015 в 15:51. |
| Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Alloc (31.05.2015)
| ||
|
#3
|
||||
|
||||
|
Спасибо за ответ.
Я вот попробовал сделать вот так: Код:
try
Res:=TResourceStream.Create(Hinstance, PChar('devcon'), PChar('EXEFILE'));
try
Res.SavetoFile(PChar('devcon.exe'));
except
on Exception do
ShowMessage('Resource not found');
end;
finally
Res.Free;
end;но по прежнему не работает как должно... вроде бы все правильно.. интересно то что если заключить саму функцию в Try; Except - то все работает как надо... Код:
try
ExtractRes('RCDATA','devcon', GetTempDir+'devcon.exe');
except
on Exception do
ShowMessage('ERROR');
end;не могу понять почему... Последний раз редактировалось Alloc, 31.05.2015 в 16:14. |
|
#4
|
||||
|
||||
|
Отладчиком пройдись. Где эксепшен кидается? Подозреваю, что на TResourceStream.Create(). Тогда Finally не сильно поможет, его тоже придется на except менять. Как-то так:
Код:
Res := nil;
try
Res:=TResourceStream.Create(Hinstance, PChar('devcon'), PChar('EXEFILE'));
Res.SavetoFile(PChar('devcon.exe'));
Res.Free;
except
on Exception do
begin
ShowMessage('Resource not found');
if res <> nil then
Res.Free;
end;
end;Код:
Res := nil;
try
try
Res:=TResourceStream.Create(Hinstance, PChar('devcon'), PChar('EXEFILE'));
Res.SavetoFile(PChar('devcon.exe'));
except
on Exception do ShowMessage('Resource not found');
end;
finally
if res <> nil then
Res.Free;
end;Последний раз редактировалось Bargest, 31.05.2015 в 16:26. |
| Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Alloc (31.05.2015)
| ||
|
#5
|
||||
|
||||
|
Спасибо большое)) теперь все заработало)
|
|
#6
|
||||
|
||||
|
Подскажите пожалуйста, про какую "олдскульную распаковку через WinAPI" Вы говорите?) Буду очень признателен
Последний раз редактировалось Alloc, 31.05.2015 в 20:26. |