Главная страница
    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.46 MB
Время: 0.005 c
14-45008
Шишкин Илья
2003-07-23 10:03
2003.08.14
Помогите найти компонент для работы с mp3


14-45099
sucer
2003-06-12 17:25
2003.08.14
HOOK problem s.Помогите !!!


14-45121
SH
2003-06-11 14:07
2003.08.14
Find and Kill


14-45079
dimonf
2003-06-15 15:07
2003.08.14
Подскажите, как правильно передать параметр в поток!


14-45090
Gayrus
2003-06-14 07:15
2003.08.14
API Timer





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский