Funktion atGetMem liefert falsche (negative) Werte

26/01/2009 - 11:35 von Klaus Oberdalhoff | Report spam
Hi,

Funktion atGetMem (aus der KnowHow / mdlSysInfo) liefert falsche (negative)
Werte, da die Zahlen "zu groß" werden.

Hat sich damit schonmal jemand beschàftigt, diese Funktion "auf Vordermann"
zu bringen ?

Ein Unsigned Long gibt es ja leider erst in VB.NET und nicht in VBA

Hat jmd eine Idee ?

Ich bekomme immer Fehler bei folgenden Statements:

wMemLoad = (1 - (atGetMem(2) / (atGetMem(1)))) * 100
wMemLoadVirt = (1 - (atGetMem(4) / (atGetMem(3)))) * 100

'Set caption text and adjust rectangle width and color
Me!lblMemLoad.Caption = wMemLoad & "%"
Me!lblMemLoad2.Caption = wMemLoadVirt & "%"
Me!objMemLoad.Width = CLng(CLng(Me.lblMemLoad.Width * CLng(wMemLoad /
100)))
Me!objMemLoad2.Width = CLng(CLng(Me!lblMemLoad.Width * CLng(wMemLoadVirt
/ 100)))

mfg Klaus


Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As
MEMORYSTATUS)

Private Type MEMORYSTATUS
dwLength As Long
dwMemoryLoad As Long
dwTotalPhys As Long
dwAvailPhys As Long
dwTotalPageFile As Long
dwAvailPageFile As Long
dwTotalVirtual As Long
dwAvailVirtual As Long
End Type


Public Function atGetMem(intInfoItem As Integer) As Variant
'**********************************************************
'Purpose: Retrieve system memory use information
'Accepts: intInfoItem: Memory Info to retrieve
' 1: Total physical memory in bytes
' 2: Available physical memory in bytes
' 3: Total virtual memory in bytes
' 4: Available virtual memory in bytes
'add
' 5: Total PageFile
' 6: Available PageFile
' 7: Memory Load
'Returns: The current memory use informaiton
'**********************************************************
On Error Resume Next

Dim MemStat As MEMORYSTATUS

MemStat.dwLength = Len(MemStat)
Call GlobalMemoryStatus(MemStat)
Select Case intInfoItem

Case 1
atGetMem = MemStat.dwTotalPhys
Case 2
atGetMem = MemStat.dwAvailPhys
Case 3
atGetMem = MemStat.dwTotalVirtual
Case 4
atGetMem = MemStat.dwAvailVirtual
Case 5
atGetMem = MemStat.dwTotalPageFile
Case 6
atGetMem = MemStat.dwAvailPageFile
Case 7
atGetMem = MemStat.dwMemoryLoad
Case Else
atGetMem = 0
End Select

End Function
 

Lesen sie die antworten

#1 Mark Doerbandt
26/01/2009 - 11:42 | Warnen spam
Hallo, Klaus,

Klaus Oberdalhoff:

Funktion atGetMem (aus der KnowHow / mdlSysInfo) liefert falsche (negative)
Werte, da die Zahlen "zu groß" werden.



ich wuerde sagen, das ist eine Frage der Interpretation. Wenn Du
weisst, dass das Ergebnis unsigned ist, hast Du doch schon gewonnen.
Was hindert Dich daran, z.B. Currency zu verwenden?

Gruss - Mark

Ähnliche fragen