Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.006 c
2-1240423276
Igor2010
2009-04-22 22:01
2009.06.07
Form-ы


4-1210775223
re_qas
2008-05-14 18:27
2009.06.07
ADSI в DLL


2-1240231874
night_light
2009-04-20 16:51
2009.06.07
сжатие и отправкакартинки по сети


6-1203515166
MonsterHell
2008-02-20 16:46
2009.06.07
Переопределение днс2


2-1240548679
просто так
2009-04-24 08:51
2009.06.07
D2009 и winapi




   Наверх