Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];

Вниз

Опять вопросс о CopyFileEx.   Найти похожие ветки 

 
miwa   (2003-07-29 21:55) [0]

Вопросс я уже задавал, но ветка куда-то пропала. А проблема в следующем: не могу передать параметром указатель на application defined функцию. Делаю так:

function CopyProgress(bla-bla-bla):integer;
...
CopyFileEx(bla-bla, @CopyProgress(bla-bla-bla), bla-bla-bla);

А компилятор ругается, что не хватает переменной. Или что несовместимы типы integer и pointer (кстати - почему? ведь пойнтер - это адресс в памяти компютера, а он ведь по идее целое?), или еще по всякому в зависимости от того, как я пробую его упросить запустится.
Г-н Зотов посоветовал такой подход:

function CopyProgress(...): DWORD; stdcall;
CopyFileEx(..., @CopyProgress, ...);
(параметры не нужны, передается только адрес самой функции)

Но и в этом случае выдается ошибка: variable requried.
Так как же все-таки копировать файлы с помощью CopyFileEx и при этом получат информацию о состоянии копирования?


 
jack128   (2003-07-29 22:24) [1]

Компилятор такое пропускает...

function CopyProgressRoutine(

TotalFileSize : int64;
TotalBytesTransferred : int64 ; // total number of bytes transferred
StreamSize : int64;
StreamBytesTransferred : int64;
dwStreamNumber : DWORD ; // the current stream
dwCallbackReason : DWORD ; // reason for callback
hSourceFile : THANDLE ; // handle to the source file
hDestinationFile : THANDLE ; // handle to the destination file
lpData : Pointer // passed by CopyFileEx
( Sender: TObject)
Компилятор такое пропускает...

function CopyProgressRoutine(

TotalFileSize : int64;
TotalBytesTransferred : int64 ; // total number of bytes transferred
StreamSize : int64;
StreamBytesTransferred : int64;
dwStreamNumber : DWORD ; // the current stream
dwCallbackReason : DWORD ; // reason for callback
hSourceFile : THANDLE ; // handle to the source file
hDestinationFile : THANDLE ; // handle to the destination file
lpData : Pointer // passed by CopyFileEx
) : DWORD; stdcall;

begin
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

CopyFileEx("","",@CopyProgressRoutine,nil,nil,0);
end;


 
miwa   (2003-07-30 01:18) [2]

Блин, это уже не смешно... Верю, что пропускает, но не у меня.
Win98/Delphi6Enterprise. При чем выдает не варнинг или хинт, а именно эррор.


 
Игорь Шевченко   (2003-07-30 11:00) [3]

function CopyFileEx(lpExistingFileName, lpNewFileName: PChar;
lpProgressRoutine: TFNProgressRoutine; lpData: Pointer; pbCancel: PBool;
dwCopyFlags: DWORD): BOOL; stdcall;

Напиши, как ты ее вызываешь с объявлением всех переменных


 
Miwa   (2003-07-31 22:26) [4]


var target,bullet:pchar;
copytodir: string;
...
bullet:=pchar(fl[i].path);
target:=pchar(copytodir + ExtractFileName(fl[i].path));
...
Application.ProcessMessages;
if CopyFileEx(bullet, target, @CopyProgressRoutine, nil, nil, COPY_FILE_RESTARTABLE) then lstTarget.Items.Add("Файл успешно скопирован.");

Естессно, uses shellapi прописано ;о)).
В этом случаэ как раз variable required. А еще я пробовал передать так:

CopyFileEx(bullet, target, @CopyProgressRoutine(переменные), nil, nil, COPY_FILE_RESTARTABLE)

и так

CopyFileEx(bullet, target, CopyProgressRoutine(переменные), nil, nil, COPY_FILE_RESTARTABLE)

и еще по-всякому, как только вообще возможно :о)). В каждом случае ошибки, в принципе, вполне понятные. Кроме этого случая.


 
Anatoly Podgoretsky   (2003-07-31 22:34) [5]

Miwa © (31.07.03 22:26)
Тебя просили все указать, а ты так и продолжаешь издеваться, наверно из за этого другую ветку и удалили.

Потом, что за странный синтаксис @CopyProgressRoutine(переменные), ты его сам придумал, смотри, что тебе сказали Зотов и jack128



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

Форум: "WinAPI";
Текущий архив: 2003.10.06;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.009 c
1-18372
Delphin
2003-09-22 22:18
2003.10.06
Удаление ключа из реестра


1-18291
ZoKr
2003-09-24 07:59
2003.10.06
ENTER=TAB


14-18607
Udjin
2003-09-17 17:58
2003.10.06
Интересный факт


7-18655
Keith Flint
2003-07-22 14:44
2003.10.06
Проверка флоппа в проводнике


1-18435
Murad
2003-09-23 12:28
2003.10.06
Ole объект





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