Nach einiger Zeit des passiven Mitlesens (und dem finden zahlreicher Tipps und Kniffe)
bin ich nun auf ein Problem gestossen, bei dem ich irgendwie nicht weiterkomme.
Wegen Lokalisierung eines kleinen Tools wurde es notwendig, das ich ich eine Unicode-Version meiner Executable erstelle.
Einige kleiner Unicode-Problemchen konnten ich umschiffen - nur bei einem Problem hänge ich im Moment noch.
Der allseits beliebte API-Call GetDiskFreeSpaceEx funktioniert unter Unicode nicht mehr.
Code: Alles auswählen
;--- GetDiskFreeSpaceDynamic.pbi ---
; ProcedureReturn = FreeMB ;==> OK
; ProcedureReturn = -1 ;==> GetDiskFreeSpaceExA not available under Win95A
Procedure.l GetDiskFreeSpaceDynamic(Drive$)
Structure int64
Long1.l
Long2.l
EndStructure
FreeMB.l = -1
If OSVersion() <> #PB_OS_Windows_95
DLL = OpenLibrary(#PB_Any, "Kernel32")
If DLL
SetErrorMode_(#SEM_FAILCRITICALERRORS)
CallFunction(DLL, "GetDiskFreeSpaceExA", @drive$, BytesFreeToCaller.int64, TotalBytes.int64, TotalFreeBytes.int64)
SetErrorMode_(0)
CloseLibrary(DLL)
EndIf
; calculate sizes in mb.
; TotalMB = ((TotalBytes\Long1 >> 20) & $FFF) | (TotalBytes\Long2 << 12)
FreeMB = ((TotalFreeBytes\Long1 >> 20) & $FFF) | (TotalFreeBytes\Long2 << 12)
EndIf
ProcedureReturn FreeMB
EndProcedure
; Drive$ = "C:\"
; FreeMB.l = 0
; FreeMB =GetDiskFreeSpaceDynamic(Drive$)
; If FreeMB = -1
; MessageRequester (" Error", "GetDiskFreeSpaceExA not available under Win95A",0)
; Else
; MessageRequester (" OK", "Free: " + Str(FreeMB) + " MB")
; EndIf
Gerade, was Offsets & Co angeht, habe ich in anderen Sprachen schon einige Überraschungen erlebt. Wie wird das unter PB gehandelt? Bzw. könnte mir eventuell jemand einen Tipp geben, wie ich die Funktion auch unter unicode zum laufen bekomme?
Besten Dank für eure Hilfe - Mein Dank wird euch ewig nachschleichen!

Stefan