Главная страница
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
15-1238749574
Ega23
2009-04-03 13:06
2009.06.07
Тут TUser меня спрашивал про аську


2-1240322521
FEV
2009-04-21 18:02
2009.06.07
Управление другой программой


3-1222067899
Клён новичок
2008-09-22 11:18
2009.06.07
Как подставить переменную в запрос?


15-1238588488
Кое кто
2009-04-01 16:21
2009.06.07
Интересная задача


2-1240278582
AIRDIGER
2009-04-21 05:49
2009.06.07
Где лучше освобождать память?