| |
|
|
 Michael Dell | ¡Hola,
folgender Code producido en el ersten Schritt una 100Mb große Expediente (erster Fortschrittsbalken), danach se el Expediente mittels uno pequeño DLL (en zlib Base) gezippt (zweiter Fortschrittsbalken).
Über una CallBack- Función se el zweite Fortschrittsbalken angesteuert, lo se el en el Speicher eingelesene Valor a el CallBack- Función transferencia (Endwert entspricht el Originalgröße el Expediente).
In Profano se ejecuta el muy bien, doch encima Profano2Cpp (v1.49d) verschwindet zweite Fortschrittsbalken en kurz darauf otra vez al Anfang a erscheinen, je größer el Expediente desto häufiger wiederholt se el. KompilierenMarcaSeparaciónDef PackRes(3) External("UP.DLL","ComprFile",&(1),&(2),&(3))
Def UnPackRes(2) External("UP.DLL","DecomprFile",&(1),&(2))
Def GSC(1) !"KERNEL32.DLL","GetSysColor"
Declare DATA#,CSID_Progre&,CDRFID_Progre&,Kfs&,DatNam1$,DatNam2$,xc&,Wert&
Proc cDRFStat
Parameters Anz&
SendMessage(CDRFID_Progre&,$0402,Anz&,0)
EndProc
Proc PackStat
Parameters PS_Quelle&
SendMessage(CSID_Progre&,$0402,Int((PS_Quelle& * 100) / Kfs&),0)
Return 0
EndProc
Proc CreateStatusInfoDlg
WindowStyle 528
Window ((%MaxX - 200) / 2),((%MaxY - 114) / 2)-200,114
CDRFID_Progre& = Control("msctls_progress32","",$50000001,20,18,160,24,%HWnd,9000,%hinstance,$010000)
CSID_Progre& = Control("msctls_progress32","",$50000001,20,52,160,24,%HWnd,9001,%hinstance,$010000)
SendMessage(CDRFID_Progre&,$0402,0,0)
EndProc
Proc KillInfoDlg
SetWindowPos %HWnd = (%MaxX + 10),0-200,114;-1
EndProc
CreateStatusInfoDlg()
DatNam1$ = "TEST.UDR"
DatNam2$ = "TEST.ZDR"
Wert& = (1024000 * 100)
Dim DATA#,((Wert&/100)+1)
Clear DATA#
String DATA#,0 = MkStr$("Z",(Wert&/100))
Assign #99,DatNam1$
OpenRW #99
WhileLoop 1,100,1
BlockWrite #99,DATA#,0,(Wert&/100)
cDRFStat(&Loop)
EndWhile
CloseRW #99
Dispose DATA#
Kfs& = FileSize(DatNam1$)
PackRes(Addr(DatNam1$),Addr(DatNam2$),ProcAddr("PackStat", 1))
Sleep 2000
KillInfoDlg()
ef='./../../function-references/XProfan/end/'>End
Hier gibst el benötigte DLL: [...] 
Keine Idea qué como abläuft, tal vez is el auch sólo en me así (128Mb RAM) |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 29.08.2005 ▲ |
|
|
|
|
 | Das riecht una Überlauf - tal vez ha Roland irgendwo qué como unsigned deklariert wo Sebastian de signed ausgeht. Tiempo sehen qué Sebastian dazu sagt... |
|
|
| |
|
|
|
 Sebastian König | ¡Hola,
[quote:21a53668e4]Das riecht una Überlauf - tal vez ha Roland irgendwo qué como unsigned deklariert wo Sebastian de signed ausgeht. Tiempo sehen qué Sebastian dazu sagt...[/quote:21a53668e4] algo como en el Art vermute Yo auch... allerdings es sowohl con XProfan, como auch con Profano2Cpp alles signed. Lo kann also sólo ser, dass C++ el Ausdruck algo anders auswertet como XProfan...
Puedo aber una einfachen Workaround anbieten Einfach zuerst por Kfs& teilen y luego veces 100 nehmen:
SendMessage(Csid_progre&,$0402,Int((Ps_quelle& / Kfs&) * 100),0)
Damit funktionierts en me auch con Profano2Cpp korrekt.
MfG
Sebastian |
|
|
| |
|
|
|
 Sebastian König | Noch qué extraño: Wenn uno el Slash por una Backslash, also Integer-Division, ersetzt, funktioniert lo auch con XProfan no mehr korrekt (gleicher Fehler...). Wahrscheinlich es al sichersten, el API-Función MulDiv() utilizarse:
[quote:63db746ded]The MulDiv function multiplies two 32-bit values and then divides the 64-bit resultado by a third 32-bit value. The volver value is rounded up or down to the nearest integer.[/quote:63db746ded] |
|
|
| |
|
|
|
 Michael Dell | Prima, así läufts! Gracias!!! |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 29.08.2005 ▲ |
|
|
|