Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.14;
Скачать: CL | DM;

Вниз

Except..End; or Finally...End; ?   Найти похожие ветки 

 
SH ©   (2003-06-11 14:05) [0]

Except..End; or Finally...End; ?
---------------------------------
Пытаюсь заюзать конструкцию try..except..finally, только вот на Finally
обламываюсь.

program Project2;

uses
windows,messages;

var
plib:hwnd;
gethello:function(flag:boolean):pchar; stdcall;
begin
plib:=LoadLibrary("Project1.dll");
try
@gethello:=getprocaddress(plib,"welcome");
MessageBox(0,gethello(true),"My First Library",mb_OK);
except
MessageBox(0,"My First Error ;-)","My First Library",mb_OK);
// finally Вот тут не выходит, требует end. Но ведь он есть строкой ниже!
freelibrary(plib);
end;
end.

Кстати, подскажите ещё как тут протестить обработку этих исключительных
ситуаций. Даже когда я специально удалил свою Dll, обработка не сработала.

library Project1;

uses
Classes;

{$R *.res}
function welcome(flag:boolean):pchar; stdcall;
begin
if flag then Result:=pchar("Привет мир!")
else Result:=pchar("Hello World!");
end;

exports welcome;

begin
end.


 
Akni ©   (2003-06-11 14:15) [1]

try
try
...
except
...
end
finally
...
end


 
Digitman ©   (2003-06-11 14:46) [2]


> как тут протестить обработку этих исключительных
> ситуаций


а при выполнении каких строчек приведенного тобой кода ты ожидаешь потенциальное возникновение исключений, которые должны быть перехвачены в блоке except ?

ни одной строчки, способной генерировать такие исключения, я не вижу... сполошь и рядом - прямые WinAPI-вызовы, знать ничего не знающие ни о каких "исключениях"


 
clickmaker ©   (2003-06-11 14:54) [3]

Чтобы вызов API (те ф-ии, которые возвращают BOOL) генерил исключение, оборачивай его в Win32Check


 
SH ©   (2003-06-11 16:40) [4]

Интересно, если почти невозможно справоцировать прогу на исключение, зачем программёры так старательно вводят эту связку (какую см. сабж)


 
clickmaker ©   (2003-06-11 16:45) [5]

Затем, что если писать, юзая VCL, то там почти все на исключениях. А Win API - нет, хотя и там есть исключения, которые могут генерить исключения (сорри за каламбур) типа Access Violation


 
Digitman ©   (2003-06-11 16:55) [6]


> SH


открой исходник процедуры Win32Check() да посмотри, каким образом коды ошибок, возвращаемые WinAPI-ф-циями, "превращаются" в те самые исключения, которые ты пытаешься поймать. Сразу все станет ясно.


 
SH ©   (2003-06-11 17:00) [7]

>А Win API - нет, хотя и ...
Так в этом примере получается try_except_finally лишние и ничего не делают? Так?


 
clickmaker ©   (2003-06-11 17:07) [8]

Если уж так хочется экцепшенов, то

try
@gethello:=getprocaddress(plib,"welcome");
if (@gethello = nil) then
( E.Message) Если уж так хочется экцепшенов, то

try
@gethello:=getprocaddress(plib,"welcome");
if (@gethello = nil) then
RaiseLastWin32Error;
except
on E:Exception do ShowMessage(E.Message);
end;


 
VMcL ©   (2003-06-11 19:08) [9]

>SH © (11.06.03 14:05)

Нет оператора try_except_finally!
Есть операторы try..except и try...finally.
См. >Akni © (11.06.03 14:15)

>Digitman © (11.06.03 14:46)
>ни одной строчки, способной генерировать такие исключения, я не вижу

Да? И если getprocaddress(plib,"welcome"); вернёт nil?


 
Anatoly Podgoretsky ©   (2003-06-12 07:56) [10]

SH © (11.06.03 17:00)
Не лишнии, нужно для: try ... finally freelibrary(plib); end



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

Текущий архив: 2003.08.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
14-45078
Shluz
2003-06-15 12:24
2003.08.14
hook и проблемма


14-45137
blackman
2003-07-29 16:55
2003.08.14
Отлаживание - это процесс избавления программы от лажи...


14-45026
VEG
2003-07-28 16:22
2003.08.14
webservis.ru - хороший хостер?


14-44978
Nick Denry
2003-07-30 00:59
2003.08.14
Несчастья...


14-45055
Viktor Kushnir
2003-07-28 08:32
2003.08.14
Delphi 6 Service Packs - Где найти?