Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CopyFile(PChar(OldFile),PChar(NewFile),False)


Страницы:   1 2

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.

У меня она не должна быть. Мне этого не надо.
Я верю, что автор вопроса не пытается ввести меня в заблуждение.
Верю и отвечаю так, как если бы принимал его вопрос за чистую монету.
Ку?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо