Форум: "Потрепаться";
Текущий архив: 2003.08.14;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c