API関数の見つけ方(違)

Wさんのモジュールを使ってテストしているのだが1回使うとOSがガタガタになって困っていた。一体何をやっているのかと思ってソースを見てビックリ。メモリ残量を測定するためにnew演算子を失敗するまで使い続けてその回数を数えていたのだ。そりゃメインメモリ限界まで確保したらガタガタになるわな。
ただメモリ残量を測定したいならそういうAPI関数はあるだろうと思って探してきました。やっぱりありましたよ。

VOID GlobalMemoryStatus(
	LPMEMORYSTATUS lpBuffer   // メモリステータスの構造体
);

ただ、これ見つけるの大変でした。いつものようにぐーぐる様に聞いたのだがなかなか思うようにいかない。ひょっとしたらWさんも探したけどあきらめたのかもしれない。それだけ大変だった。結果、ぐーぐる様から直接答えを貰うのをあきらめた。
んじゃあどうしたかというと、まずは目的のAPI関数を使ってそうなフリーソフトを探してくる。今回の場合はメモリ監視のソフトとか。そのソフトを落としてexeファイルやdllファイルをテキストエディタで開く。exeやdllファイルはだいたい1箇所にAPI関数やdll関数の名前を列挙しているのでその場所を探す。exeやdllを作ったコンパイラにもよるがVisualStudioの場合は下から2割あたりに大体ある。そこからそれらしい名前を探して片っ端からぐーぐる様に聞いてみる。API関数名なら大抵はMSDNに引っかかるのでそこで目的の関数かどうかが分かる。

もっと頭のいい方法はあるとは思うけどこれも一つの方法ということで(^^;