Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.06;
Скачать: CL | DM;

Вниз

Опять вопросс о 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 вся ветка

Текущий архив: 2003.10.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
1-18320
LordBTR
2003-09-23 11:45
2003.10.06
Русификация приложений


3-18249
muzzzy
2003-09-16 11:07
2003.10.06
dbf создать...


3-18221
yuray76
2003-09-15 17:08
2003.10.06
Количество коннектов к базе Interbase...


1-18400
w666w
2003-09-25 17:25
2003.10.06
OnTreminate := SomeObj.SomeProc вместе с FreeOnTerminate := true;


6-18512
Erik Ivanov
2003-08-07 16:41
2003.10.06
Перекодировка в TIdHTTP