Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1178504800
Konus
2007-05-07 06:26
2007.05.27
работа со string ом


2-1178865815
Wood
2007-05-11 10:43
2007.05.27
Помогите с SQL - INSERT,


15-1177603378
ArtemESC
2007-04-26 20:02
2007.05.27
Опрос - 10 любимых фильмов....


1-1175504870
Dmitry_177
2007-04-02 13:07
2007.05.27
перезагрузить компьютер


15-1177628719
ЭРИКА
2007-04-27 03:05
2007.05.27
ВСЕМ ,КТО РОДИЛСЯ СЕГОДНЯ!





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