TClock Lightをx64へ移植

TClock LightをWindowsXP x64で動作するように改良したときの方法と手順

この記事は、tclocklight-040702-3.zipを元に作成しています。
バージョンが違う場合、修正方法が変わる場合があります。

  1. TClock Lightをダウンロードし、適当な場所へ展開(パスに日本語が含まれるとcl.exeがうまく動かない場合があった)
  2. Windows Server 2003 SP1 Platform SDKをダウンロードし、インストール
  3. スタートメニュー→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) を開く
  4. 1の展開した場所のsource\(Makefileがあるところ)に移動
  5. ソースの修正(※1)
  6. 全てのtclock.manifestのprocessorArchitectureをX86からAMD64(または*)へ変更
  7. nmakeで実行ファイルを作成
  8. 7で作成された64bit版のtcdll.tclock, tclock.exe, tcplayer.exe, tcprop.exe, tcsntp.exe, tctimer.exe とlangフォルダを同じフォルダに入れ作業完了

※1 ソース修正箇所について

  1. SetWindowLong→SetWindowLongPtr に置き換える
    全てのソースに対して、SetWindowLongをSetWindowLongPtrに置き換える。
    そのとき引数にGWL_WNDPROCが指定されている場合は、同時にGWLP_WNDPROCに変更する

  2. GetWindowLong→GetWindowLongPtrに置き換える
    全てのソースに対して、GetWindowLongをGetWindowLongPtrに置き換える。
    そのとき引数にGWL_WNDPROCが指定されている場合は、同時にGWLP_WNDPROCに変更する

  3. SetClassLong→SetClassLongPtrに置き換える
    全てのソースに対して、SetClassLongをSetClassLongPtrに置き換える。

  4. GetWindowLong→GetWindowLongPtrに置き換える
    全てのソースに対して、GetWindowLongをGetWindowLongPtrに置き換える。
    そのとき引数にGCL_WNDPROCが指定されている場合は、同時にGCLP_WNDPROCに変更する

  5. dllutl.cの16行目のLONGをLONG_PTRに置き換える
  6. Makefileの8行目、デフォルトライブラリの設定を削除(デフォルトライブラリを使用するようにする)(※2)
  7. *.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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です