Форум: "Прочее";
Текущий архив: 2009.06.07;
Скачать: [xml.tar.bz2];
ВнизОшибки 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c