(XP,VB6)
自作アプリケーションの実行中のメモリ使用率を取得する方法を探していると、
下記のサイトのサンプルを見つけることが出来たのですが、
うまく動きませんでした。
プログラム中の GetCurrentProcess() の戻り値が-1になってしまいます。
原因のお分かりになる方、教えていただけないでしょうか。
よろしくお願いいたしす。
http://www.fukkey.dyndns.org/pins/vb/030731/48408.html
> プログラム中の GetCurrentProcess() の戻り値が-1になってしまいます。
それで正常かと。(戻り値は実ハンドルではなく、擬似ハンドルを示す定数です)
念のため、Err.LastDllError の値もチェックしておいてください。
それと、プロジェクトに「Option Explicit」を宣言しているかどうかも確認してください。
# この宣言が無いと、サンプル中のスペルミスに気づきにくいので…。
ご回答ありがとうございます。
> > プログラム中の GetCurrentProcess() の戻り値が-1になってしまいます。
> それで正常かと。(戻り値は実ハンドルではなく、擬似ハンドルを示す定数です)
そうだったのですか。てっきりここがバグなのかと思っていました;;
> それと、プロジェクトに「Option Explicit」を宣言しているかどうかも確認してください。
> # この宣言が無いと、サンプル中のスペルミスに気づきにくいので…。
「Option Explicit」を付けてみて分かりました。
サンプル中の「PMC」が「wPMC」になっていました!!
このサンプルを信用しきっていたので全く気がつきませんでした。
改めて「Option Explicit」を付けることの重要性が身にしみました。
> 念のため、Err.LastDllError の値もチェックしておいてください。
「122」という値が返って来ました。
「LastDllError」というものを全く知らなかったのでヘルプで調べてみたら、
「最後にダイナミック リンク ライブラリ (DLL) を呼び出したときのエラー コードを返します。」
と書いてありました。つまり、DLLを呼び出したときにエラーが起きていたということなのですね。
いろいろなことを学ばせて頂きました。
どうもありがとうございました。
> 「122」という値が返って来ました。
ちなみに、122 の意味は、
『システム コールに渡されるデータ領域が小さすぎます。』
『The data area passed to a system call is too small.』
です。
バグ入りコードの場合、バッファサイズを指定している Len(wPMC) の値が
0 になっているので、妥当なエラー値といえるでしょうね。
# すなわち、エラー値から問題点を想像できる事もある、ということで。
すいません、わざわざ教えて頂いて;;
> # すなわち、エラー値から問題点を想像できる事もある、ということで。
エラー処理って本当に大事だったんですね。趣味の域を出ないようなプログラミングしかしたことがなく、エラー処理というものをほとんどしてこなかったのですが、これからはエラー処理も勉強して人に聞く前にいろいろ確かめてから質問したいと思います。
本当にわざわざどうもありがとうございました。
| ツイート |
|