Форум: "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