Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wie funktioniert MoveFileWithProgress? (https://www.delphipraxis.net/64782-wie-funktioniert-movefilewithprogress.html)

matze0815 8. Mär 2006 08:20


Wie funktioniert MoveFileWithProgress?
 
Hallo!

Ich suche ein Beispiel des Win32-API Befehls "MoveFileWithProgress".
Es geht mir darum den Fortschitt eines Kopier- oder Verschiebe-Prozesses abzufangen.

Informationen habe ich schon unter
http://msdn.microsoft.com/library/de...thprogress.asp
und
http://msdn.microsoft.com/library/de...essroutine.asp
gefunden, aber mir ist dennoch nicht klar, wie ich den Aufruf der CallBack-Funktion gestalte!

Hier mein Versuch:

Delphi-Quellcode:
Result := MoveFileWithProgress(pchar(FilenameSource),
                               pchar(FilenameDest),
                               ProgressProc,
                               nil,
                               MOVEFILE_REPLACE_EXISTING);

function ProgressProc(TotalFileSize, TotalBytesTransferred, StreamSize, StreamBytesTransferred: longInt;
                      dwStreamNumber, dwCallbackReason: DWORD;
                      hSourceFile, hDestinationFile: THANDLE;
                      lpData: Pointer): DWORD;
begin
//...
end;
Die Fehlermeldung ist: "Nicht genügend wirkliche Parameter." :-(

Bin für jeden Hinweis dankbar!

(Ich verwende Delphi 2005)

Flocke 8. Mär 2006 08:24

Re: Wie funktioniert MoveFileWithProgress?
 
Du müsstest deine Routine so deklarieren:
Delphi-Quellcode:
function CopyProgressRoutine(TotalFileSize, TotalBytesTransferred, StreamSize,
  StreamBytesTransferred: int64; dwStreamNumber, dwCallbackReason: DWORD;
  hSourceFile, hDestinationFile: THandle; lpData: pointer): DWORD; stdcall;
begin
...
end;
Wichtig sind das stdcall, die exakten Typen der Parameter (int64) und dass es sich nicht um die Methode eines Objekts handeln darf. Bei der Angabe als Parameter machst du dann ein @ vor den Namen, also:
Delphi-Quellcode:
Result := MoveFileWithProgress(pchar(FilenameSource),
                               pchar(FilenameDest),
                               @CopyProgressRoutine,
                               nil,
                               MOVEFILE_REPLACE_EXISTING);


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz