Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1238515497
@!!ex
2009-03-31 20:04
2009.06.07
Как научить гугл понимать многоязыковые страницы?


15-1238953192
ЭРИКА
2009-04-05 21:39
2009.06.07
С ДНЕМ РОЖДЕНИЯ!


15-1238827193
dreamse
2009-04-04 10:39
2009.06.07
Плагины для IE


15-1238668291
sniknik
2009-04-02 14:31
2009.06.07
Вызов окна с инициализацией, проблема в IE7


2-1239854707
Чипырик
2009-04-16 08:05
2009.06.07
OpenPictureDialog.InitialDir





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