Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.06.07;
Скачать: CL | DM;

Вниз

Ошибки Delphi при компиляции   Найти похожие ветки 

 
charodey_mag   (2009-04-05 09:15) [0]

Сейчас сталкнулся с такой не понятной для меня вещью. Использую функция CopyFileEx, предпоследние параметр это указатель на boolean, который если примет в процессе копирования true то копирование прервется.
Вот кусок кода:

var
 Form1: TForm1;
 cancelCopy: boolean;
 TotalByte:dword;

...

CopyFileEx(PChar(s1),PChar(s2),@CopyProgressRoutine,ProgressBar1,@cancelCopy,0)


cancelCopy всегда FALSE (в отладчике тоже показывает false), но копирование не происходит, ошибка всегда "Копирование прервано". Подумал что это D7 что-то не так делает, откомпилил в D2009, тоже самое...
Потом сделал так:

type
 TForm1 = class(TForm)
  ...
 public
   TotalByte:dword;
var
 Form1: TForm1;
 cancelCopy: boolean;
 

B вот так работает!

Кто-нибудь может сказать что происходит?


 
TUser ©   (2009-04-05 09:22) [1]

Ты уверен, что там именно указатель?


 
charodey_mag   (2009-04-05 09:28) [2]

Да точно,
http://msdn.microsoft.com/en-us/library/aa363852.aspx
+ cancelCopy обязательно должна быть глобальной

я же говорю, заработало от того что я глобальную переменную TotalByte перенес в секцию Public, вот этого я совсем не понимаю


 
жж   (2009-04-05 09:45) [3]


> charodey_mag   (05.04.09 09:28) [2]


нет, "глобальность" или  "локальность" cancelCopy вызывамой тобой Апи функции совершенно по барабану


 
Servy ©   (2009-04-05 09:56) [4]

Из [0] неочевидно, зачем вообще нужна переменная TotalByte. Как параметр она никуда не передается, так что ее перенос куда-либо не имеет смысла.


> cancelCopy: boolean;

Типы BOOL и Boolean это разные типы (BOOL в 4 раза больше). CopyFileEx ждет указатель на BOOL.


 
Servy ©   (2009-04-05 10:00) [5]

Возможно, что TotalByte использовался в CopyProgressRoutine и устанавливался в какое-либо значение. Тогда, так как он был объявлен после CancelCopy, CopyFileEx считала его частью переменной cancelCopy (так как CopyFileEx ждала указатель на 4хбайтовую переменную).

Таким образом, установка ненулевого значения в TotalByte приводила к тому, что CancelCopy становился True и копирование отменялось.


 
charodey_mag   (2009-04-05 10:29) [6]


> Типы BOOL и Boolean это разные типы

Да, спасибо, не знал. Действительно изменил тип на LongBool и стало нормально работать



Страницы: 1 вся ветка

Текущий архив: 2009.06.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
2-1240349849
delphoto
2009-04-22 01:37
2009.06.07
Как удалить фотографию из Access


2-1240294907
Гость
2009-04-21 10:21
2009.06.07
Обработка ошибки при неверном добавлении записи в БД.


2-1240291958
девушка
2009-04-21 09:32
2009.06.07
Массовая печать


15-1238704205
Юрий
2009-04-03 00:30
2009.06.07
С днем рождения ! 3 апреля 2009 пятница


2-1240454821
vegarulez
2009-04-23 06:47
2009.06.07
Вопрос про Zquery+ while not EOF