當記憶體不超過4G時,用GlobalMemoryStatus可以獲取記憶體大小
Declare GlobalMemoryStatusEx In kernel32 string @test
test=Replicate(Chr(0),64)
CLEAR
?GlobalMemoryStatus(@test)
FOR i=1 TO 64
?ASC(SUBSTR(test,i,1))
endfor
將數值乘以一定數字相加就是記憶體大小了
當記憶體超過4G,用GlobalMemoryStatus獲取的記憶體大小是錯的, 但是改用GlobalMemoryStatusEx獲取記憶體,函式執行成功后,為什么字串test里仍然是空的?
Declare GlobalMemoryStatusEx In kernel32 string @test
test=Replicate(Chr(0),64)
CLEAR
?GlobalMemoryStatusEx(@test)
FOR i=1 TO 64
?ASC(SUBSTR(test,i,1))
endfor
uj5u.com熱心網友回復:
問題解決,學習十豆三大俠的代碼,
不過GlobalMemoryStatusEx執行前要設定結構長度
declare long GlobalMemoryStatusEx IN kernel32;
string @lpBuffer
PRIVATE cBuffer
cBuffer = bintoc(64,'4rs')+replicate(chr(0), 60) //結構長度寫入緩沖區
clear
=GlobalMemoryStatusEx(@cBuffer)
?"結構的長度,在使用函式前必須初始化此值:"+Transform(buf2num(substr(cBuffer,1,4)))
?"物理記憶體的使用率(0~100的整數):"+TRANSFORM(buf2num(substr(cBuffer,5,4)))
?"物理記憶體的總量,MB:"+TRANSFORM(buf2num(substr(cBuffer,9,8)))
?"物理記憶體的剩余量,MB:"+TRANSFORM(buf2num(substr(cBuffer,17,8)))
?"系統頁面檔案大小,MB:"+ TRANSFORM(buf2num(substr(cBuffer,25,8)))
?"系統可用頁面檔案大小,MB:"+TRANSFORM(buf2num(substr(cBuffer,33,8)))
?"虛擬記憶體的總量,MB:" +TRANSFORM(buf2num(substr(cBuffer,41,8)))
?"虛擬記憶體的剩余量,MB:"+TRANSFORM(buf2num(substr(cBuffer,49,8)))
?"保留值 "+TRANSFORM(buf2num(substr(cBuffer,57,8)))
function buf2num
PARAMETERS cBuf
RETURN ICASE(LEN(CBUF)=8,round(MTON(CTOBIN(cBuf,"YRS"))*10000/1024/1024,0),LEN(CBUF)=4,round(MTON(CTOBIN(cBuf,"4RS")),0))
ENDFUNC
uj5u.com熱心網友回復:
VFP還保留有高手啊轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/33213.html
標籤:VFP
下一篇:多列、分類,統計匯總,如何做?
