TClock Light を Visual C++ 2005 でコンパイルしてみるの巻
しばらく改造から遠ざかってたのでそれを追っかける意味でもトライしてみた。
ポイントは以下の通り。
- NODEFAULTLIB を切って CRT がリンクされるようにする。
- VC2005 だと /Oi (組み込み関数の生成) がバグってて memcpy/memset が生成されなかったりするので実行ファイルのサイズを小さくするのは諦めた。
- dll/tcdll.mak で COPT に /D_CRT_NON_CONFORMING_SWPRINTFS を定義。
- すべての mak ファイルで COPT に /D_CRT_NO_SECURE_WARNINGS を定義。
- これはセキュアでない CRT 関数を使っていると出る。これもソースを変更せずに warning を揉み消す方向で。
これでとりあえずコンパイルは通るようになった。次はシステム情報の表示で PC の搭載メモリが 2GB を超えると使用可能メモリ量が正しく表示されなくなるというもの。
これは dll/sysinfo.c の GlobalMemoryStatus を呼び出している所を Windows 2000 以降なら GlobalMemoryStatusEx を呼び出すようにすればよい。ただそのまま GlobalMemoryStatusEx を呼び出すと Windows 2000 以前の OS で TClock が起動できなくなるかもしれない(未確認)ので GetModuleHandle("kernel32")/GetProcAddress を使って動的に呼び出した方がいいかもしれない。
まぁざっとこんな感じでとりあえず使えるようになった。使用可能メモリ量の表示はバグと気づかなかったぐらいで初めにこの問題を解決してくれた tclock-071230-analog 版の id:egggarden 氏とそれを TClock Light に移植してくれた TClock Light- の slic 氏には感謝したい。