| |
|
|
 Michael Dell | allô Sebastian,
hab là un kleines Problem entdeckt et zwar dans allen Versionen de Prf2Cpp. cela ganze betrifft qui Funktionen DiskFree/DiskSize sowie qui API GetDiskFreeSpaceExA.
DiskFree/DiskSize fonctionne sur WinXP prima mais pas sur Win98. GetDiskFreeSpaceExA fonctionne sur beiden Systemen pas. (vermute cela es quoi avec qui Byte Funktion trop 1faire hat.)
ici un Demo: KompilierenMarqueSéparation!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
Fin
|
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 28.08.2006 ▲ |
|
|
|
|
 Sebastian König | allô Michael,
merci pour den Hinweis et den Testcode!
cela Problem chez qui variante avec GetDiskFreeSpaceExA() liegt beim Aufruf qui Funktion x!(): C++ benutzt là zur Berechnung aucun Fließkomma-Arithmetik mais simple Integer. malheureusement peux on cela pas so simple changement, là es sich arrêt um une reinen Integer-Ausdruck handelt. il y a mais glücklicherweise une très einfachen Workaround : si Du dans qui DEFinition simple @!() statt @%() verwendest, sollte es sowohl avec XProfan comme aussi avec Profan2Cpp richtig marcher...
à cause de qui l'affaire avec DiskFree/DiskSize melde je mich später nochmal 
MfG
Sebastian |
|
|
| |
|
|
|
 Michael Dell | merci, cela funktioniert 
le moi cela encore pas Geschnallt hab, je sollte mich wohl plus konzentrieren. |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 28.08.2006 ▲ |
|
|
|
|
 Sebastian König | [quote-part:1b6b11ce43]merci, cela funktioniert [/quote-part:1b6b11ce43] Ok, super 
maintenant trop dem anderen Problem: comme Ursache vermute je, dass je dans meiner Implementierung de DiskFree() seulement merci, cela funktioniert GetDiskFreeSpace() benutze. en supplément steht dans qui Remarks-Sektion im MSDN, dass es sous Win95/98 Probleme avec Laufwerkskapazitäten > 2GB gibt... dans qui prochain Beta-Version (qui je wohl demain hochladen werde) werde je cela la fois sur GetDiskFreeSpaceEx() ajuster...
MfG
Sebastian |
|
|
| |
|
|
|
 Sebastian König | allô Michael,
justement habe je Version 1.5.9f hochgeladen (et aussi à cette Beitrag angehängt ). marcher @DiskFree() et @DiskSize() avec cela maintenant aussi sous Windows 98 korrekt?
MfG
Sebastian |
|
|
| |
|
|
|
 Michael Dell | allô Sebastian,
fonctionne Prima!!! merci  |
|
|
| Salu Michael...
Hab zwar krumme Fieß awer dofir e' ecklich Gsicht! | 30.08.2006 ▲ |
|
|
|