![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CopyFile(PChar(OldFile),PChar(NewFile),False)
Rimd © (2007-05-08 15:39:00)По GetLastError выдает 87L ERROR_INVALID_PARAMETER, все параметры в норме, что он хочет?
Anatoly Podgoretsky (2007-05-10 16:47:00) [1]> {RASkov} (10.05.2007 11:12:30) [30]
Кырдык конечно, только она
раньше доложит куда
следует.
Reindeer Moss Eater (2007-05-10 13:13:00) [2]Все ж таки склоняюсь к тому, что деление на ноль в API VCL сможет перехватить, и обработать привычным образом.
Перехватить может и можно. Если его кто-то воздбуждает.
А его кто-то возбуждает?
И что это такое на самом деле?
Если исключение - это исключительно языковое понятие.
Это все равно что спросить "как пропинговать tcp порт?"
А что такое "порт" на уровне OCI пинга?
Ничто.
Нет его.
{RASkov} (2007-05-10 12:57:00) [3]> [34] Loginov Dmitry © (10.05.07 12:49)
> Кто хочет, может это проверить.
Я хочу.... как? :)
Loginov Dmitry (2007-05-10 12:49:00) [4]> А если и будет (хотя его ни за что не будет) то вы его в
> Delphi поймать все равно не сможете. Согласно Библии все
> исключения это классы. А все классы это потомки TObject.
Все ж таки склоняюсь к тому, что деление на ноль в API VCL сможет перехватить, и обработать привычным образом. Кто хочет, может это проверить.
{RASkov} (2007-05-10 11:35:00) [5]> у меня интерес был в другом...
Дело в том, что если б я знал кроме Delphi какой-нибудь язык, где нет этих обработок исключений, то можно было б проверить на примере [28] :)
отсюда интерес... как на АСМ написать прогу, для проверки вопроса, в пару строк (всего-то например 5-у разделить на 0) и "скомпилить debug'ом." Если кто сможет вот этот батник переделать чёб получилась прога: деления 5-и на 0, то, думаю, мой интерес будет исчерпан...
@ECHO OFF
ECHO N BEEP.COM>BEEP.SCR
ECHO E 0100 B0 07 CD 29 C3>>BEEP.SCR
FOR %%A IN (RCX 0005 W Q) DO ECHO %%A>>BEEP.SCR
DEBUG<BEEP.SCR>NUL
DEL BEEP.SCR
Данный батник делает "пищалку"...
{RASkov} (2007-05-10 11:22:00) [6]> [31] Reindeer Moss Eater © (10.05.07 11:17)
> user32.dll, стать потомком какого-то там TObject?
про ТКлассы давно понятно.... у меня интерес был в другом... Спасибо за пояснения...
Reindeer Moss Eater (2007-05-10 11:17:00) [7]Не знаю что будет. Это зависит от программиста писавшего конкретный код.
Скорее всего тот программер аккуратно проверяет аргументы перед вызовом деления.
Но исключения точно не будет.
А если и будет (хотя его ни за что не будет) то вы его в Delphi поймать все равно не сможете. Согласно Библии все исключения это классы. А все классы это потомки TObject.
Вопрос: как в языке, на котором написан, скажем, user32.dll, стать потомком какого-то там TObject?
{RASkov} (2007-05-10 11:12:00) [8]> [29] Reindeer Moss Eater © (10.05.07 11:05)
> Исключения в АПИ даже в такой вышеописанной ситуации не будет.
А шо будет-то? Просто интересно.... Винда кирдык? Мне серьезно интересно.
Reindeer Moss Eater (2007-05-10 11:05:00) [9]Исключения - это не ошибки, а средство, придуманное разработчиками некоторых языков для удобства программистов.
Исключения в АПИ даже в такой вышеописанной ситуации не будет.
Loginov Dmitry (2007-05-10 10:59:00) [10]> Они просто не генерируют исключений, а не как правило.
Надеюсь, что это действительно всегда так. Только если где-нибудь в API возникнет непредусмотренная ошибка деления на ноль (это не Дельфевая, а системная ошибка) - что будет?
Reindeer Moss Eater (2007-05-10 09:14:00) [11]а они не генерируют исключение (как правило).
Они просто не генерируют исключений, а не как правило.
Исключения и их обработка - изобретения конкретных языков программирования.
Что делать с исключенииями поднятыми в winapi(если такие были бы), в программе, написанной на языке, не имеющем никакого понятия про исключения (такие языки есть)?
Anatoly Podgoretsky (2007-05-09 15:29:00) [12]> sinus (09.05.2007 11:20:24) [24]
Смысл есть, только ты туда
не попадешь
Loginov Dmitry (2007-05-09 12:48:00) [13]> если можно мог бы кто объяснить по чему нет смысла вызывать
> getLastError
> после в try .. except ?
Обычно GetLastError применяется после вызова виндовых функций API, а они не генерируют исключение (как правило). В этом случае упоминание try..except здесь не к месту.
sinus (2007-05-09 11:20:00) [14]
> Reindeer Moss Eater © (09.05.07 10:39) [22]
> GetLastError нужно проверять сразу после контролируемой
> функции, или в секции except в первую очередь.
>
> Все интереснее и интереснее.
> В секции except вызывать гетластеррор вообще ни малейшего
> смысла нет.
> Объяснять почему, или сам догадаешься?
если можно мог бы кто объяснить по чему нет смысла вызывать getLastError
после в try .. except ?
{RASkov} (2007-05-09 11:14:00) [15]> [22] Reindeer Moss Eater © (09.05.07 10:39)
Согласен, ошибся по поводу except'а...
> Объяснять почему
Расскажи всем, думаю, в этой ветке будет полезно... ;)
Это:
You should call the GetLastError function immediately when a function's return value indicates that such a call will return useful data.
остается....
Reindeer Moss Eater (2007-05-09 10:39:00) [16]GetLastError нужно проверять сразу после контролируемой функции, или в секции except в первую очередь.
Все интереснее и интереснее.
В секции except вызывать гетластеррор вообще ни малейшего смысла нет.
Объяснять почему, или сам догадаешься?
Anatoly Podgoretsky (2007-05-08 23:33:00) [17]> Rimd (08.05.2007 15:39:00) [0]
> все параметры в норме
А не врешь?
{RASkov} (2007-05-08 22:54:00) [18]> а сообщение немного странное...
"странное" - в кавычках должно быть, потому как ничего странного нет.
{RASkov} (2007-05-08 22:50:00) [19]> Я верю, что автор вопроса не пытается ввести меня в заблуждение.
А я не верю :(
> Верю и отвечаю так, как если бы принимал его вопрос за чистую монету.
Ну ладно.... убедил :) Наивный :) шучу.
Это больше для автора вопроса.
GetLastError нужно проверять сразу после контролируемой функции, или в секции except в первую очередь.
При НЕ выполнении этого(может еще чего не учел, но это первое что пришло на ум) нет гарантии, что GetLastError вернет нужное значение.
Пример:
procedure TForm1.ButtonClick(Sender: TObject);
var N: Integer; OldFile, NewFile: String;
begin
OldFile:='';
NewFile:='';
CopyFile(PChar(OldFile), PChar(NewFile), False);
N:=GetLastError;
// BorderStyle:=bsSingle;
ShowMessage('CurrentError: '+SysErrorMessage(GetLastError)+#13#10'LastErrorCopyFile: '+IntToStr(N)+'-'+SysErrorMessage(N));
end;
Пробуем с закомментированной строкой и затем ее расскомментируем.
Если подставить имена файлов "нормальные" то, вродебы безобидный код получился, а сообщение немного странное...
Reindeer Moss Eater (2007-05-08 22:42:00) [20]Но здесь тогда должна быть уверенность, что GetLastError проверен сразу после CopyFile.
У меня она не должна быть. Мне этого не надо.
Я верю, что автор вопроса не пытается ввести меня в заблуждение.
Верю и отвечаю так, как если бы принимал его вопрос за чистую монету.
Ку?