Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.47 MB
Время: 0.005 c
14-45039
Best Gun
2003-07-19 15:19
2003.08.14
Хочу задать несколько вопросов


14-44973
Delf
2003-07-26 15:42
2003.08.14
Оптимальный раскрой(упаковка)


14-45011
Calm
2003-07-29 07:59
2003.08.14
? Отношение ср. арфм. двух сумм равно ср. арфм. сумме отношений?


14-45149
Nick-From
2003-07-31 00:28
2003.08.14
ищу скрипт


14-44957
Yuraz
2003-08-04 11:35
2003.08.14
Как сделать приложение без формы? (при запуске программы)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский