TClock LightをWindowsXP x64で動作するように改良したときの方法と手順
この記事は、tclocklight-040702-3.zipを元に作成しています。
バージョンが違う場合、修正方法が変わる場合があります。
- TClock Lightをダウンロードし、適当な場所へ展開(パスに日本語が含まれるとcl.exeがうまく動かない場合があった)
- Windows Server 2003 SP1 Platform SDKをダウンロードし、インストール
- スタートメニュー→Microsoft Platform SDK for Windows Server 2003 SP1→Open Build Environment Window→Windows XP 64-bit Build Environment→Set Windows XP x64 Build Environment (Retail) を開く
- 1の展開した場所のsource\(Makefileがあるところ)に移動
- ソースの修正(※1)
- 全てのtclock.manifestのprocessorArchitectureをX86からAMD64(または*)へ変更
- nmakeで実行ファイルを作成
- 7で作成された64bit版のtcdll.tclock, tclock.exe, tcplayer.exe, tcprop.exe, tcsntp.exe, tctimer.exe とlangフォルダを同じフォルダに入れ作業完了
※1 ソース修正箇所について
- SetWindowLong→SetWindowLongPtr に置き換える
全てのソースに対して、SetWindowLongをSetWindowLongPtrに置き換える。
そのとき引数にGWL_WNDPROCが指定されている場合は、同時にGWLP_WNDPROCに変更する
- GetWindowLong→GetWindowLongPtrに置き換える
全てのソースに対して、GetWindowLongをGetWindowLongPtrに置き換える。
そのとき引数にGWL_WNDPROCが指定されている場合は、同時にGWLP_WNDPROCに変更する
- SetClassLong→SetClassLongPtrに置き換える
全てのソースに対して、SetClassLongをSetClassLongPtrに置き換える。
- GetWindowLong→GetWindowLongPtrに置き換える
全てのソースに対して、GetWindowLongをGetWindowLongPtrに置き換える。
そのとき引数にGCL_WNDPROCが指定されている場合は、同時にGCLP_WNDPROCに変更する
- dllutl.cの16行目のLONGをLONG_PTRに置き換える
- Makefileの8行目、デフォルトライブラリの設定を削除(デフォルトライブラリを使用するようにする)(※2)
- *.makのLIBS=にbufferoverflowu.libを追加
※2
cl.exe Ver.14.00.40310 では、ここにあるmemsetのインライン展開がされていないようで、デフォルトライブラリ未使用時にはリンクエラーが発生します。
以上が、x64への移植の作業内容ですが、実はコンパイル中の警告をかなりの数 無視していたりします。本来であれば、それらについてもチェックし必要があれば修正するべきですが、今のところ問題なく動作しているのでいいかなと^^;
追記(05/05/18)
64bitバイナリが起動失敗する原因について、喜多様より情報をいただきましたので、
それに基づいて、手順を修正しました。
追記(05/05/18)
上記方法で作成した実行ファイルを配布します。
ライセンスは、オリジナルTClock Lightに従ってください。
tclocklight-040702-3-amd64.lzh
投稿者 NMVL : 2005年5月 4日 13:23