Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
ВнизCopyFile(PChar(OldFile),PChar(NewFile),False) Найти похожие ветки
← →
Rimd (2007-05-08 15:39) [0]По GetLastError выдает 87L ERROR_INVALID_PARAMETER, все параметры в норме, что он хочет?
← →
Reindeer Moss Eater © (2007-05-08 15:39) [1]Правильный параметр хочет
← →
DevilDevil © (2007-05-08 17:59) [2]код в студию
← →
Reindeer Moss Eater © (2007-05-08 18:01) [3]Код уже два часа как в студии.
:)
← →
{RASkov} © (2007-05-08 18:17) [4]> [0] Rimd (08.05.07 15:39)
Вообще в Сабже все параметры верные...
У тебя после сабжа и перед GetLastError есть еще что-нибудь?
И что есть OldFile, NewFile и чему они равны в момент вызова CopyFile?
← →
Reindeer Moss Eater © (2007-05-08 18:20) [5]Вообще в Сабже все параметры верные...
Откуда это известно?
Знаем наперед что там у него в переменных OldFile и NewFile лежит?
← →
{RASkov} © (2007-05-08 18:55) [6]> [5] Reindeer Moss Eater © (08.05.07 18:20)
> Знаем наперед что там у него в переменных OldFile и NewFile лежит?
То что там лежит это уже не параметры функции из сабжа.... Результат функции PChar() является правильным, для сабжа, параметром.
Я ведь не зря про них(OldFile и NewFile) тоже поинтересовался... ;)
← →
Плохиш © (2007-05-08 18:57) [7]
> {RASkov} © (08.05.07 18:55) [6]
> > [5] Reindeer Moss Eater © (08.05.07 18:20)
> > Знаем наперед что там у него в переменных OldFile и NewFile
> лежит?
>
> То что там лежит это уже не параметры функции из сабжа
Может стоит ещё несколько раз пост [0] прочитать...
← →
{RASkov} © (2007-05-08 19:01) [8]> [7] Плохиш © (08.05.07 18:57)
Ну да.. сначало [0] потом [4].....
Здесь ежу ясно, что что-то не-то с OldFile и NewFile.
← →
Rial © (2007-05-08 19:01) [9]> [0] Rimd (08.05.07 15:39)
> По GetLastError выдает 87L ERROR_INVALID_PARAMETER, все
> параметры в норме, что он хочет?
С чего ты взял, что ошибка вообще возникает ?
GetLastError возвращает последнюю ошибку, но с чего
бы ей быть именно здесь ?
← →
{RASkov} © (2007-05-08 19:13) [10]> [9] Rial © (08.05.07 19:01)
+1
Даже вот такprocedure TForm1.Button1Click(Sender: TObject);
begin
CopyFile(PChar(Sender), PChar(Button1), False);
ShowMessage(SysErrorMessage(GetLastError));
end;
Показывает: Не удается найти указанный файл.
Но если ошибка у автора появляется в момент копирования, то фик знает... пусть полный код покажет...
И опять же... в моем примере сделано специально вызов функции с ошибкой... если в моем примере вызвать функцию без ошибки т.е.procedure TForm1.Button1Click(Sender: TObject);
begin
CopyFile(PChar("C:\boot.ini"), PChar("C:\bootold.ini"), False);
ShowMessage(SysErrorMessage(GetLastError));
end;
то ShowMessage все равно отобразится и покажет последнюю в системе ошибку.
← →
begin...end © (2007-05-08 20:35) [11]> {RASkov} © (08.05.07 19:13) [10]
> если в моем примере вызвать функцию без ошибки
> то ShowMessage все равно отобразится и покажет последнюю
> в системе ошибку.
Не уверен.
← →
{RASkov} © (2007-05-08 20:38) [12]> [11] begin...end © (08.05.07 20:35)
> Не уверен.
Покажет... "Операция успешно завершена"
:)
← →
Reindeer Moss Eater © (2007-05-08 20:50) [13]То что там лежит это уже не параметры функции из сабжа.... Результат функции PChar() является правильным, для сабжа, параметром.
Да что ты говоришь?
И значит по твоему такой GetlastError это результат паскалевского приведения PChar ?
Остается только пофантазировать, откуда winapi узнало о сущесвтовании PChar и самого Паскаля.
← →
begin...end © (2007-05-08 20:51) [14]> {RASkov} © (08.05.07 20:38) [12]
Угу. Я просто хотел обратить внимание, что если сразу после вызова CopyFile LastError <> 0, то ошибка возникла именно в результате работы этой функции, т.к. предыдущее значение ошибки она сбрасывает.
← →
{RASkov} © (2007-05-08 21:02) [15]> [13] Reindeer Moss Eater © (08.05.07 20:50)
> И значит по твоему такой GetlastError это результат паскалевского приведения PChar ?
А откуда у тебя такая уверенность что GetlastError проверен сразу после CopyFile?
ЗЫ Я больше спорить не буду пока не будут ответы на вопросы в [4]....
← →
Reindeer Moss Eater © (2007-05-08 21:05) [16]А откуда у тебя такая уверенность что GetlastError проверен сразу после CopyFile?
У меня нет такой уверенности.
И это не моя проблема.
Есть вопрос, в котором русским по белому сказано, что вызов винапи функции обламывается с таким-то кодом гетластеррора.
Все.
Требуется дать максимально адекватный ответ на вопрос "почему?" и "что оно ждет от меня?"
И ответ дан.
← →
{RASkov} © (2007-05-08 22:08) [17]> [16] Reindeer Moss Eater © (08.05.07 21:05)
> И ответ дан.
Где? Если в [1] - то... куда хочет? Если в CopyFile то См. [9],[15],.... [4] наконец.
И тут противоречие:
> [16] Reindeer Moss Eater © (08.05.07 21:05)
>У меня нет такой уверенности.
.......
>вызов винапи функции обламывается с таким-то кодом гетластеррора.
вызов винапи функции - CopyFile я так понимаю.
По твоим словам можно понять, что ошибка GetLastError - это ошибка после CopyFile.
И что не верные параметры именно в CopyFile. Но здесь тогда должна быть уверенность, что GetLastError проверен сразу после CopyFile.
Нет, я не говорю, что я в споре прав, а ты нет(или наоборот)....
В итоге, мы может быть, одно и то-же хотим доказать....(каждый по своему), а автор вопроса молчит как рыба об лед :(
ЗЫ непоспорить не удержался :)
← →
Reindeer Moss Eater © (2007-05-08 22:42) [18]Но здесь тогда должна быть уверенность, что GetLastError проверен сразу после CopyFile.
У меня она не должна быть. Мне этого не надо.
Я верю, что автор вопроса не пытается ввести меня в заблуждение.
Верю и отвечаю так, как если бы принимал его вопрос за чистую монету.
Ку?
← →
{RASkov} © (2007-05-08 22:50) [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;
Пробуем с закомментированной строкой и затем ее расскомментируем.
Если подставить имена файлов "нормальные" то, вродебы безобидный код получился, а сообщение немного странное...
← →
{RASkov} © (2007-05-08 22:54) [20]> а сообщение немного странное...
"странное" - в кавычках должно быть, потому как ничего странного нет.
← →
Anatoly Podgoretsky © (2007-05-08 23:33) [21]> Rimd (08.05.2007 15:39:00) [0]
> все параметры в норме
А не врешь?
← →
Reindeer Moss Eater © (2007-05-09 10:39) [22]GetLastError нужно проверять сразу после контролируемой функции, или в секции except в первую очередь.
Все интереснее и интереснее.
В секции except вызывать гетластеррор вообще ни малейшего смысла нет.
Объяснять почему, или сам догадаешься?
← →
{RASkov} © (2007-05-09 11:14) [23]> [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.
остается....
← →
sinus © (2007-05-09 11:20) [24]
> Reindeer Moss Eater © (09.05.07 10:39) [22]
> GetLastError нужно проверять сразу после контролируемой
> функции, или в секции except в первую очередь.
>
> Все интереснее и интереснее.
> В секции except вызывать гетластеррор вообще ни малейшего
> смысла нет.
> Объяснять почему, или сам догадаешься?
если можно мог бы кто объяснить по чему нет смысла вызывать getLastError
после в try .. except ?
← →
Loginov Dmitry © (2007-05-09 12:48) [25]> если можно мог бы кто объяснить по чему нет смысла вызывать
> getLastError
> после в try .. except ?
Обычно GetLastError применяется после вызова виндовых функций API, а они не генерируют исключение (как правило). В этом случае упоминание try..except здесь не к месту.
← →
Anatoly Podgoretsky © (2007-05-09 15:29) [26]> sinus (09.05.2007 11:20:24) [24]
Смысл есть, только ты туда
не попадешь
← →
Reindeer Moss Eater © (2007-05-10 09:14) [27]а они не генерируют исключение (как правило).
Они просто не генерируют исключений, а не как правило.
Исключения и их обработка - изобретения конкретных языков программирования.
Что делать с исключенииями поднятыми в winapi(если такие были бы), в программе, написанной на языке, не имеющем никакого понятия про исключения (такие языки есть)?
← →
Loginov Dmitry © (2007-05-10 10:59) [28]> Они просто не генерируют исключений, а не как правило.
Надеюсь, что это действительно всегда так. Только если где-нибудь в API возникнет непредусмотренная ошибка деления на ноль (это не Дельфевая, а системная ошибка) - что будет?
← →
Reindeer Moss Eater © (2007-05-10 11:05) [29]Исключения - это не ошибки, а средство, придуманное разработчиками некоторых языков для удобства программистов.
Исключения в АПИ даже в такой вышеописанной ситуации не будет.
← →
{RASkov} © (2007-05-10 11:12) [30]> [29] Reindeer Moss Eater © (10.05.07 11:05)
> Исключения в АПИ даже в такой вышеописанной ситуации не будет.
А шо будет-то? Просто интересно.... Винда кирдык? Мне серьезно интересно.
← →
Reindeer Moss Eater © (2007-05-10 11:17) [31]Не знаю что будет. Это зависит от программиста писавшего конкретный код.
Скорее всего тот программер аккуратно проверяет аргументы перед вызовом деления.
Но исключения точно не будет.
А если и будет (хотя его ни за что не будет) то вы его в Delphi поймать все равно не сможете. Согласно Библии все исключения это классы. А все классы это потомки TObject.
Вопрос: как в языке, на котором написан, скажем, user32.dll, стать потомком какого-то там TObject?
← →
{RASkov} © (2007-05-10 11:22) [32]> [31] Reindeer Moss Eater © (10.05.07 11:17)
> user32.dll, стать потомком какого-то там TObject?
про ТКлассы давно понятно.... у меня интерес был в другом... Спасибо за пояснения...
← →
{RASkov} © (2007-05-10 11:35) [33]> у меня интерес был в другом...
Дело в том, что если б я знал кроме 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
Данный батник делает "пищалку"...
← →
Loginov Dmitry © (2007-05-10 12:49) [34]> А если и будет (хотя его ни за что не будет) то вы его в
> Delphi поймать все равно не сможете. Согласно Библии все
> исключения это классы. А все классы это потомки TObject.
Все ж таки склоняюсь к тому, что деление на ноль в API VCL сможет перехватить, и обработать привычным образом. Кто хочет, может это проверить.
← →
{RASkov} © (2007-05-10 12:57) [35]> [34] Loginov Dmitry © (10.05.07 12:49)
> Кто хочет, может это проверить.
Я хочу.... как? :)
← →
Reindeer Moss Eater © (2007-05-10 13:13) [36]Все ж таки склоняюсь к тому, что деление на ноль в API VCL сможет перехватить, и обработать привычным образом.
Перехватить может и можно. Если его кто-то воздбуждает.
А его кто-то возбуждает?
И что это такое на самом деле?
Если исключение - это исключительно языковое понятие.
Это все равно что спросить "как пропинговать tcp порт?"
А что такое "порт" на уровне OCI пинга?
Ничто.
Нет его.
← →
Anatoly Podgoretsky © (2007-05-10 16:47) [37]> {RASkov} (10.05.2007 11:12:30) [30]
Кырдык конечно, только она
раньше доложит куда
следует.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.043 c