Seite 4 von 4
Verfasst: 16.11.2006 20:05
von ts-soft
>> Spielt da vielleicht der Quad-Variablentyp von PB nicht mit?
Hab gerade nicht viel Zeit, aber hab keinen Parameter als Quad in der
Funktion gesehen. Werde aber später nochmal schaun, wenn sich sonst
keiner meldet.
Ansonsten ist dies vielleicht interessant für Dich:
http://www.purebasic.fr/german/viewtopi ... highlight=
Verfasst: 17.11.2006 14:57
von Sicro
Vielen Dank, ts-soft.

Die Funktion ist mir aber schon bekannt.
Die Callback-Funktion benötigt für die ersten 4 Parameter Quad-Variablen. Siehe WinAPI-Auszug:
DWORD WINAPI CopyProgressRoutine(
LARGE_INTEGER TotalFileSize, // total file size, in bytes
LARGE_INTEGER TotalBytesTransferred, // total number of bytes transferred
LARGE_INTEGER StreamSize, // total number of bytes for this stream
LARGE_INTEGER StreamBytesTransferred, // total number of bytes transferred for this stream
DWORD dwStreamNumber, // the current stream
DWORD dwCallbackReason, // reason for callback
HANDLE hSourceFile, // handle to the source file
HANDLE hDestinationFile, // handle to the destination file
LPVOID lpData // passed by CopyFileEx
);
Mfg DerProgger
Verfasst: 17.11.2006 15:23
von ts-soft
Bei mir gehts
Code: Alles auswählen
Enumeration
#PROGRESS_CONTINUE
#PROGRESS_CANCEL
#PROGRESS_STOP
#PROGRESS_QUIET
EndEnumeration
Procedure CopyProgress(TotalFileSize.q, TotalBytesTransferred.q, StreamSize.q, StreamBytesTransferred.q, dwStreamNumber.l, dwCallBackReason.l, hSourceFile.l, lDestinationFile.l, *lpData.l)
Debug TotalBytesTransferred
ProcedureReturn #progress_continue
EndProcedure
CopyFileEx_(@"TestFile.txt", @"TestFile.bak", @CopyProgress(), 0, 0, 0)
MfG
Der TS-Soft
Verfasst: 17.11.2006 18:03
von Sicro
Dein Code geht bei mir auch - selbiges bei meinem Code, wenn ich die Prozentsatz-Berechnung
(sorry, hätte ich erwähnen sollen...) herausnehme
Versuche nun mal mit den Parameter-Variablen zu rechnen. Ersetze zum Beispiel die Codezeile
"Debug TotalBytesTransferred" durch "Debug TotalBytesTransferred + 1". Beim Ausführen des
Codes wird dann ein "Invalid memory access"-Fehler ausgelöst und die Codezeile
"ProcedureReturn #progress_continue" markiert.
Mfg DerProgger
Verfasst: 17.11.2006 21:35
von ts-soft
Das ist dasselbe Problem wie bei Threads. Ordne die Werte neuen Variablen
zu. Ansonsten kann es sein, das die API den Wert aktualisiert, während Du
addierst, da ist dann im Speicher was ungültig!
// Nachtrag:
Bei Quads ist PB sowieso etwas langsam, da sind solche Fehler
wahrscheinlicher. Callback ist ja einem Thread ähnlich.
Verfasst: 18.11.2006 16:30
von Sicro
ts-soft hat geschrieben:Ordne die Werte neuen Variablen zu.
Habe ich auch schon versucht, bringt aber leider nichts.
Mfg DerProgger
Verfasst: 18.11.2006 18:56
von ts-soft
Dann setz #PROGRESS_STOP bis Deine Anzeige fertig ist, danach wieder
#PROGRESS_CONTINUE
Verfasst: 08.12.2006 19:45
von Sicro
Mit der Konstante "#PROGRESS_STOP" wird der gesamte Kopiervorgang
abgebrochen, die bereits kopierten Daten aber nicht gelöscht.
Ich habe auch schon versucht, CopyFileEx danach immer wieder aufzurufen
bis die komplette Datei kopiert wurde, aber so hat die Variable
"TotalBytesTransferred" immer den Wert "0".
Hat jemand noch eine Idee?
Mfg DerProgger