HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0802
moritoshi4GB以上のメモリ取得について5解決


moritoshi

リンク

2010/8/2(Mon) 18:49:05|NO.34194

質問ですが、テスト環境がないため、4G以上のメモリ取得がわかりません
調べたところ、

#uselib "KERNEL32.DLL" #func GlobalMemoryStatusEx "GlobalMemoryStatusEx" var dim buf,16 buf(0)=64 GlobalMemoryStatusEx buf mes strf("メモリ容量(下位)=%x",buf(2)) mes strf("メモリ容量(上位)=%x",buf(3))

が出てきましたが、これの上位と下位をあわせて10進にした上で
double型変数に代入することはできるんでしょうか?
よろしくお願いします。



この記事に返信する


ext

リンク

2010/8/2(Mon) 20:39:44|NO.34195

私の環境では、GlobalMemoryStatusExでは「メモリ容量(上位)」の値は0になってしまい、
「メモリ容量(下位)」の値は大きすぎてint型では正常に表示されませんでした。

>double型変数に代入することはできるんでしょうか?
double型に代入したいのであれば手動で変換したらいいのではないでしょうか?


#uselib "KERNEL32.DLL" #func GlobalMemoryStatusEx "GlobalMemoryStatusEx" var dim buf,16 buf(0)=64 GlobalMemoryStatusEx buf memory=strf("%x",buf(2)) ddim data,3 repeat strlen(memory) data(0)=data(1) data(1)=double(int("$"+strmid(memory,cnt,1)+"")) data(2)=data(2)*16.0+data(1) loop mes data(2)



moritoshi

リンク

2010/8/2(Mon) 21:47:05|NO.34196

ご返答ありがとうございます。

質問を少し間違えてました。
double型変数に代入したら、4GB以上を正常に取得することができるのでしょうか?

よろしくお願いします。



momo

リンク

2010/8/3(Tue) 09:44:32|NO.34212

>double型変数に代入したら、4GB以上を正常に取得することができるのでしょうか?
できますよ
これが一番スマートだと思います

#uselib "KERNEL32.DLL" #func GlobalMemoryStatusEx "GlobalMemoryStatusEx" var ddim buf,8 lpoke buf,0,64 GlobalMemoryStatusEx buf //表示 mes strf("%I64u",buf(1)) //double変換 memsize=double(strf("%I64u",buf(1)))



MillkeyWeler

リンク

2010/8/3(Tue) 15:55:30|NO.34228

momo さんの方が、最適であったため、当方が提示した、書き込みを削除させていただきました。
ですが、momoさんの提示されたスクリプトで、[MEMORYSTATUSEX構造体]の一部の、dwMemoryLoad; がbuf(0) の一部として返されるため、
そこだけは、val=peek(buf(0),4) などで取得してくださいね。

また、momoさんのスクリプトにて、[MEMORYSTATUSEX構造体]のすべての数値を正常に取得できた事を報告します。



moritoshi

リンク

2010/8/3(Tue) 22:06:23|NO.34239

ありがとうございます。
4GB環境がなく、確認が取れなかったので、参考になりました。

回答してくださった皆様、誠にありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.