| |
|
|
 Michael Dell | ¡Hola Sebastian,
tener como una kleines Problema entdeckt y zwar en allen Versionen de Prf2Cpp. Das todo betrifft el Características DiskFree/DiskSize sowie el API GetDiskFreeSpaceExA.
DiskFree/DiskSize se ejecuta en WinXP prima pero no en Win98. GetDiskFreeSpaceExA se ejecuta en beiden Systemen no. (vermute el lo qué con el Byte Función a tun ha.)
Hier una Demo: KompilierenMarcaSeparación!Def GFDS_lwTyp(1) SubStr$(LW_Typ($(1)),2,"> ")
Def GFDS_DskSpaceGesamt(1) Val(SubStr$(SubStr$($(1),2,"|||"),1,"||"))
Def GFDS_DskSpaceFrei(1) Val(SubStr$(SubStr$($(1),2,"|||"),2,"||"))
Def GFDS_DskSpaceBelegt(1) Val(SubStr$(SubStr$($(1),2,"|||"),3,"||"))
Proc ShowIt
Parameters txt$
Print
Print SubStr$(txt$,1,"|||")
Print (" "+Format$("###,##0.00",Round(Div(GFDS_DskSpaceGesamt(txt$),1000000),2))+" Mb gesamt")
Print (" "+Format$("###,##0.00",Round(Div(GFDS_DskSpaceFrei(txt$),1000000),2))+" Mb frei")
Print (" "+Format$("###,##0.00",Round(Div(GFDS_DskSpaceBelegt(txt$),1000000),2))+" Mb belegt")
Print
Print
EndProc
Proc LW_Typ
Parameters LW$
Def LaufwerksTyp(1) !"KERNEL32.DLL","GetDriveTypeA"
Declare LW#,LW_Typ&
Dim LW#,Add(Len(LW$),1)
String LW#,0 = LW$
LW_Typ& = LaufwerksTyp(LW#)
Dispose LW#
Case Equ(LW_Typ&,0): Return LW$+"> keine Ahnung"
Case Equ(LW_Typ&,1): Return LW$+"> nicht vorhanden"
Case Equ(LW_Typ&,2): Return LW$+"> Diskette"
Case Equ(LW_Typ&,3): Return LW$+"> Festplatte"
Case Equ(LW_Typ&,4): Return LW$+"> Netz Laufwerk"
Case Equ(LW_Typ&,5): Return LW$+"> CD/DVD"
Case Equ(LW_Typ&,6): Return LW$+"> RAM"
Return "Fehler!"
EndProc
Proc GetDiskFreeSpace
Parameters gDS_LW$
Declare Gesamt!,Belegt!,gFrei!
Clear Gesamt!,Belegt!,gFrei!
gDS_LW$ = (Left$(gDS_LW$,3) + Chr$(0))
DiskFree(gDS_LW$)
DiskSize(gDS_LW$)
Gesamt! = DiskSize(gDS_LW$)
gFrei! = DiskFree(gDS_LW$)
Belegt! = (Gesamt! - gFrei!)
Return (GFDS_lwTyp(gDS_LW$)+"|||"+ Str$(Gesamt!) + "||" + Str$(gFrei!) + "||" + Str$(Belegt!))
EndProc
Proc old_GetDiskFreeSpace
Parameters Path$
Declare LWtyp$
Def GetDiskFreeSpaceEx(4) !"KERNEL32.DLL","GetDiskFreeSpaceExA"
Def x!(8) (((((((%(8)*256+%(7))*256+%(6))*256+%(5))*256+%(4))*256+%(3))*256+%(2))*256+%(1))
Declare Path#,AvBytes#,TotalBytes#,FreeBytes#,frei!,gesamt!,avb!,erg$
Dim Path#,255
Dim AvBytes#,8
Dim TotalBytes#,8
Dim FreeBytes#,8
String Path#,0 = Path$
GetDiskFreeSpaceEx(Path#,AvBytes#,TotalBytes#,FreeBytes#)
gesamt! = x!(Byte(TotalBytes#,0),Byte(TotalBytes#,1),
Byte(TotalBytes#,2),Byte(TotalBytes#,3),
Byte(TotalBytes#,4),Byte(TotalBytes#,5),
Byte(TotalBytes#,6),Byte(TotalBytes#,7))
frei! = x!(Byte(FreeBytes#,0),Byte(FreeBytes#,1),
Byte(FreeBytes#,2),Byte(FreeBytes#,3),
Byte(FreeBytes#,4),Byte(FreeBytes#,5),
Byte(FreeBytes#,6),Byte(FreeBytes#,7))
avb! = Sub(gesamt!,frei!)
gesamt! = Round(gesamt!,0)
frei! = Round(frei!,0)
avb! = Round(avb!,0)
erg$ = "|||"+Str$(gesamt!)+"||"+Str$(frei!)+"||"+Str$(avb!)
erg$ = GFDS_lwTyp(Path$) + erg$
Dispose AvBytes#
Dispose TotalBytes#
Dispose FreeBytes#
Dispose Path#
Return erg$
EndProc
**** Programm- Source ****
Cls
Print "Mit qDiskFree/DiskSizeq"
ShowIt(GetDiskFreeSpace("C:"))
ShowIt(GetDiskFreeSpace("D:"))
Print "Mit qGetDiskFreeSpaceExAq"
ShowIt(old_GetDiskFreeSpace("C:"))
ShowIt(old_GetDiskFreeSpace("D:"))
WaitInput
End
|
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 28.08.2006 ▲ |
|
|
|
|
 Sebastian König | ¡Hola Michael,
danke para el Referencia y el Testcode!
Das Problema en Variante con GetDiskFreeSpaceExA() liegt beim Aufruf el Función x!(): C++ benutzt hay a Berechnung no Fließkomma-Arithmetik pero simplemente Integer. Leider puede ser el no así simplemente ändern, como lo sólo en una reinen Integer-Ausdruck es. Lo son aber glücklicherweise una muy einfachen Workaround : Si usted en el DEFinition simplemente @!() en lugar de @%() verwendest, debería lo sowohl con XProfan como auch con Profano2Cpp correcto trabajo...
Wegen el Sache con DiskFree/DiskSize melde Yo mich später otra vez 
MfG
Sebastian |
|
|
| |
|
|
|
 Michael Dell | Gracias, el funktioniert 
Das Yo el ya otra vez no Geschnallt tener, Yo debería mich wohl mehr konzentrieren. |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 28.08.2006 ▲ |
|
|
|
|
 Sebastian König | [quote:1b6b11ce43]Gracias, el funktioniert [/quote:1b6b11ce43] Ok, super 
Jetzt a el otro Problema: Als Ursache vermute Yo, dass Yo en meiner Implementierung de DiskFree() sólo Gracias, el funktioniert GetDiskFreeSpace() benutze. Dazu es en el Remarks-Sektion en el MSDN, dass lo bajo Win95/98 Problemas con Laufwerkskapazitäten > 2GB son... In el nächsten Beta-Versión (el Yo wohl morgen hochladen voluntad) voluntad Yo el veces en GetDiskFreeSpaceEx() ajustar...
MfG
Sebastian |
|
|
| |
|
|
|
 Sebastian König | ¡Hola Michael,
gerade Yo Versión 1.5.9f hochgeladen (y außerdem a esta Contribución angehängt ). Funktionieren @DiskFree() y @DiskSize() así ahora bajo Windows 98 korrekt?
MfG
Sebastian |
|
|
| |
|
|
|
 Michael Dell | ¡Hola Sebastian,
se ejecuta Prima!!! Gracias  |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 30.08.2006 ▲ |
|
|
|