mp3infpをx64へ移植(Ver.2.53d)

Ver.2.53dの移植作業が終わったので掲載します。
時間がないので変更内容については割愛させてもらいます。

  • ダウンロード
    バイナリ mp3infp253d_x64.lzh (627KB)
    ソース mp3infp253d_x64_src.lzh (1,131KB)
    ※OggVorbisのライブラリは、1.1.2をx64用にコンパイルし直したものに差し替えてあります。

  • 関連リンク
    mp3infpをx64へ移植(VC6編 part2)
    mp3infpをx64へ移植(VC6編)
    mp3infpをx64へ移植2
    mp3infpをx64へ移植

  • mp3infpをx64へ移植(VC6編 part2)

    やり方を少し整理したので、最新版を使ってもう一度やってみました。

    用意するもの

    1. Microsoft Visual C++ 6.0 Professional(以下VC)
    2. Microsoft Platform SDK for Windows Server 2003 R2(以下PSDK)
    3. mp3infpのソースコード(Ver.2.52fを使用)

    作業方法

    1. mp3infpのソースコードを適当な場所へ解凍(日本語を含まないパスの方がよい)
    2. PSDKのSet Windows XP x64 Build Environment (Retail)でコマンドプロンプトを起動させ、
      そこからVCを/useenvオプションを付けて起動させる

    3. OggVorbisのヘッダとライブラリのパスを追加
    4. カスタムビルドのコマンドラインを空にする
    5. リンクするライブラリから odbc32.lib,odbccp32.lib を削除
    6. リンクするライブラリに bufferoverflowu.lib を追加
    7. 全ての*.manifestのprocessorArchitectureをX86からAMD64(または*)へ変更
    8. ソースコードの修正(※1)
    9. 全てビルド
    10. 作成されたファイルmp3infp.cpl, mp3infp.dllをC:\WINDOWS\system32へコピー
    11. mp3infp_regist.exeを適当な場所へコピー
    12. その下にフォルダlanguageを作成し、Japanese.lngをコピー
    13. レジストリエディタ(regedit.exe)を起動して、HKEY_LOCAL_MACHINE\Software以下にキー「win32lab.com」を作成し、その下に「mp3infp」を作成する。
    14. その中で、文字列値「path」を作成し、値をmp3infp_regist.exeをコピーした場所にする
    15. ファイル名を指定して実行から「regsvr32.exe mp3infp.dll」を実行

    ※1 ソース修正箇所について
    警告箇所など、問題ありそうなところを修正を追加しました。
    詳細は実際のソースを見た方が早いでしょう。

    1. stdafx.h の afxdb.h,afxdao.h のinclude行をコメントアウト
    2. GetWindowLongをGetWindowLongPtrに変更。同時にDWL_USER→DWLP_USER
    3. SetWindowLongをSetWindowLongPtrに変更。同時にDWL_USER→DWLP_USER, DWL_MSGRESULT→DWLP_MSGRESULT
      また、SetWindowLongの引数で、ポインタをDWORDにキャストして渡している箇所があるが、ここのキャストをLONG_PTRに必ず変更すること

    4. GetFloppyType.cpp 6~7行目をコメントアウト
    5. SendMessageTimeoutの最後の引数をDWORD型からDWORD_PTR型に変更
    6. ShellExt.h 226行目のUINTをUINT_PTRに変更
    7. ShellExt_IShellPropSheetExt.cppのダイアログプロシージャ代入箇所(psp.pfnDlgProc=PageDlgProc_XXX)の右辺にキャスト(DLGPROC)を追加
    8. ShellExt_IContextMenu.cppの97行目のUINTをUINT_PTRに変更
    9. SendMessageの戻り値をlongに格納してCB_ERR(-1)と比較している箇所をlong→LRESULTに変更

    今のところ、マニフェストファイルの埋め込みがうまくいっていない問題がありますが、
    自分ではビジュアルスタイルにならなくとも気にならないので保留にしています。
    気になるのであれば原因を調査してみてください(そして原因を教えてください^^;)

  • ダウンロード
    バイナリ mp3infp252f_x64.lzh
    ソース mp3infp252f_x64_src.lzh

  • 関連リンク
    mp3infpをx64へ移植(VC6編)
    mp3infpをx64へ移植2
    mp3infpをx64へ移植

  • mp3infpをx64へ移植(VC6編)

    試しに使ってみた、VC2005Expressの動作の重さや、
    やたらとエラー吐いて落ちまくる不安定さに、
    計画していたVisualStudio2005の購入計画も保留となってしまい、
    まだまだ我が家では現役続行のVC6を使用して、
    以前VisualStudio2005を使ってx64へ移植を行ったmp3infpを、
    x64へ移植できないかと、やってみた時のメモ。

    用意するもの

    1. Microsoft Visual C++ 6.0 Professional(以下VC)
    2. Microsoft Platform SDK for Windows Server 2003 R2(以下PSDK)
    3. mp3infpのソースコード(Ver.2.52dを使用)

    作業方法

    1. mp3infpのソースコードを適当な場所へ解凍(日本語を含まないパスの方がよい)
    2. x64用の設定でVCを起動(方法はPSDKとかAMDのページを参考にしてください)
    3. OggVorbisのヘッダとライブラリのパスを追加
    4. 全プロジェクトのリンカのmachineオプションを /machine:AMD64 に変更
    5. stdafx.h の afxdb.h,afxdao.h のinclude行をコメントアウト
    6. リンクするライブラリに bufferoverflowu.lib を追加
    7. lang_japaneseとmp3infp_registのリンクするライブラリから odbc32.lib,odbccp32.lib を削除
    8. ソースコードの修正(※1)
    9. 全ての*.manifestのprocessorArchitectureをX86からAMD64(または*)へ変更
    10. mp3infpの依存関係からlang_japaneseを外す
    11. カスタムビルドの Verupdate.exe の呼び出しを削除
    12. 全てビルド
    13. 作成されたファイルmp3infp.cpl, mp3infp.dllをC:\WINDOWS\system32へコピー
    14. mp3infp_regist.exeを適当な場所へコピー
    15. その下にフォルダlanguageを作成し、Japanese.lngをコピー
    16. レジストリエディタ(regedit.exe)を起動して、HKEY_LOCAL_MACHINE\Software以下にキー「win32lab.com」を作成し、その下に「mp3infp」を作成する。
    17. その中で、文字列値「path」を作成し、値をmp3infp_regist.exeをコピーした場所にする
    18. ファイル名を指定して実行から「regsvr32.exe mp3infp.dll」を実行

    ※1 ソース修正箇所について
    修正箇所は、前回までと同じと考えていいですが、
    エラーが出なかった部分については、未修正としたので少し減ってます。

    1. GetWindowLongをGetWindowLongPtrに変更。同時にDWL_USER→DWLP_USER
    2. SetWindowLongをSetWindowLongPtrに変更。同時にDWL_USER→DWLP_USER, DWL_MSGRESULT→DWLP_MSGRESULT
      また、SetWindowLongの引数で、ポインタをDWORDにキャストして渡している箇所があるが、ここのキャストをLONG_PTRに必ず変更すること

    3. GetFloppyType.cpp 6~7行目をコメントアウト
    4. SendMessageTimeoutの最後の引数をDWORD型からDWORD_PTR型に変更
    5. ShellExt.h 226行目のUINTをUINT_PTRに変更
    6. ShellExt_IContextMenu.cppの97行目のUINTをUINT_PTRに変更
    7. ShellExt_IShellPropSheetExt.cppのダイアログプロシージャ代入箇所(psp.pfnDlgProc=PageDlgProc_XXX)の右辺にキャスト(DLGPROC)を追加

    バイナリ・ソースは、少々お待ちください。

    mp3infpをx64へ移植2
    mp3infpをx64へ移植

    mp3infpをx64へ移植2

    最新バージョンを移植しました。
    移植の手順・方法は、前回と同じため省略します。
    詳しくは「mp3infpをx64へ移植」をご覧ください。

  • ソースコード
    mp3infp252a_x64_src.lzh

  • バイナリファイル
    前回同様、Visual Studio 2005 Beta 2 Go-Liveライセンスにより、実行ファイルを公開します。
    以下のことについて、ご理解のされた上で、ダウンロード・インストールを行ってください。

    1. Visual Studio 2005 Beta 2 Go-Liveライセンスにより、配布されます。
      Go-Liveライセンスについては、リンク先のページを参照してください。

    2. 実行ファイルは、β版の開発ツールにより作成されています。
      通常より、リスクが高いことをご理解の上ご使用ください

    mp3infp252a_x64.lzh

  • mp3infpをx64へ移植

    TClockの移植に成功したので、今度はmp3infpの移植に挑戦しました。
    mp3infp250_src.cabを元に作成しました。
    また、開発環境にVisualStudio2005β2日本語版を使用しています。
    VisualStudio2005β2日本語版は、MSDN サブスクリプション や、雑誌の付録で入手できます。
    私の場合は、MSDN サブスクリプションには入会していないので、日経BPムック「完全詳説!VisualStudio2005&SQL Server2005」\1900から入手しました。
    なお、ExpressEditionでは、x64コードを作成できません。
    必ず、TeamSystemなどのx64コードを出力可能なものを用意する必要があります。
    また、OggVorbisのヘッダーとライブラリが必要になります。
    OggVorbisのx64用ライブラリは現在のところ公開されていないようですので、
    自分で作成する必要があります。こちらも、別途作成し用意してください。

    1. mp3infpのソースコードをダウンロードし、適当な場所へ展開
    2. mp3infp.dswを、VisualStudio2005で開く
    3. プロジェクトを変換するか聞かれるので、全て変換する
    4. 構成マネージャを起動し、ソリューションプラットフォームにx64を追加
    5. ソースコードの修正(※1)
    6. 全ての*.manifestのprocessorArchitectureをX86からAMD64(または*)へ変更
    7. 全てビルド
    8. 7で作成されたファイルmp3infp.cpl, mp3infp.dllをC:\WINDOWS\system32へコピー
    9. mp3infp_regist.exeを適当な場所へコピー
    10. その下にフォルダlanguageを作成し、Japanese.lngをコピー
    11. レジストリエディタ(regedit.exe)を起動して、HKEY_CURRENT_USER以下にキー「win32lab.com」を作成し、その下に「mp3infp」を作成する。
    12. その中で、文字列値「path」を作成し、値を9でコピーした場所にする
    13. ファイル名を指定して実行から「regsvr32.exe mp3infp.dll」を実行

    ※1 ソース修正箇所について
    修正する箇所が多かったため、まだまとめきれていませんが、
    基本的に、コンパイラのエラーを全て修正しただけです。
    ロジック等に変更は加えていません。
    以下、差分をとって判明している分のみ記載

    1. GetWindowLongをGetWindowLongPtrに変更。同時にDWL_USER→DWLP_USER
    2. SetWindowLongをSetWindowLongPtrに変更。同時にDWL_USER→DWLP_USER, DWL_MSGRESULT→DWLP_MSGRESULT
      また、SetWindowLongの引数で、ポインタをDWORDにキャストして渡している箇所があるが、ここのキャストをLONG_PTRに必ず変更すること

    3. Unicode関係のAPI(WideCharToMultiByteや、MultiByteToWideChar, UTF16toUTF16BE等)の引数のキャストを修正(unsigned short * → WCHAR *)
    4. GetFloppyType.cpp 6~7行目をコメントアウト
    5. for文で、使用する変数(int i)の宣言が不足している箇所に、宣言を追加
    6. SendMessageTimeoutの最後の引数をDWORD型からDWORD_PTR型に変更
    7. ShellExt.h 226行目のUINTをUINT_PTRに変更
    8. ShellExt_IContextMenu.cppの97行目のUINTをUINT_PTRに変更
    9. ShellExt_IQueryInfo.cppの1050,1055,1060,1065,1070行目の右辺側にキャスト(LPCSTR)を追加
    10. ShellExt_IShellPropSheetExt.cppの101,128,156,183,216,249,280,311,342,373,404,435行目の右辺にキャスト(DLGPROC)を追加

    今回も、TClock Lightのときと同様、警告は無視しています。
    そもそも、ほとんどの警告はコンパイラのバージョンアップにより、
    (昔より)構文チェックが厳しくなったことによるもののようですから、
    警告の大部分は無視しても大丈夫な警告なのかな。とも今は考えています。
    今のところ、正常に動いているようですし、たぶん大丈夫でしょう


    追記(05/06/06)
    上記方法で、変更したソースを公開します。
    実行ファイルの配布については、VisualStudio2005β2のライセンス条件により
    配布することができないため、現在は行っておりません。
    mp3infp250_x64_src.lzh (678KB)


    追記(05/06/07)
    Visual Studio 2005 Beta 2 Go-Liveライセンスにより、実行ファイルを公開します。
    以下のことについて、ご理解のうえダウンロードください。

    1. Visual Studio 2005 Beta 2 Go-Liveライセンスにより、配布されます。
      Go-Liveライセンスについては、リンク先のページを参照してください。

    2. 実行ファイルは、β版の開発ツールにより作成されています。
      通常より、リスクが高いことを認識してください。

    mp3infp250_x64.lzh (974KB)
    インストール方法は、同梱のテキストファイルを参照してください。
    うまくいけば、このようになります。
    mp3infp_x64_screenshot.png