トップページ > 過去ログ > 記事閲覧
DXライブラリを64bitにする!
名前:sy(サイ) 日時: 2012/02/24 15:45

雑談&質問掲示板(日付順表示)にも書きましたが長くなりそうなのでこちらに書かせていただきます。 最近、64bitOSを導入しまして、現在作成中のゲームを64bit化しようと企んでおります。 しかし、DxLibMakeプロジェクト内のwinSDKのコードをすべて64bitコードに書き換えるのはとても作業量が多いです。 どこからでも読みこむDxlib.hの一番下に以下を記入してみました。 #if defined(_WIN32) #if defined(_WIN64) #define GWL_WNDPROC GWLP_WNDPROC #define GWL_HINSTANCE GWLP_HINSTANCE #define GWL_HWDPARENT GWLP_HWNDPARENT #define GWL_USERDATA GWLP_USERDATA #define DX_NON_INLINE_ASM #else #endif #endif とりあえずこれだけである程度のエラーが消えました。 アセンブラコードは使えないのでDX_NON_INLINE_ASMを定義しています。 問題はシフト演算がずれてしまうこと。64bit用に再定義されたものが多岐にわたることですね。。 初めて挑戦するので64bit化をすでに実践した方がいらっしゃいましたら、何かアドバイスを頂けると嬉しいです。 あなたの環境を64bitでコンパイルするための準備はこちらで http://d.hatena.ne.jp/torutk/20100927/

Page: 1 |

Re: DXライブラリを64bitにする! ( No.1 )
名前:管理人 日時:2012/03/04 20:41

他に優先したいことがあるので正式な64bit対応の作業はかなり先になりそうです 申し訳ありません
Re: DXライブラリを64bitにする! ( No.2 )
名前:sy(サイ) 日時:2012/03/09 20:27

面倒なことが多かったので一時休止してましたが、復活。 win32マクロを再定義である程度エラーに対応。 #if defined(_WIN32) #if defined(_WIN64) // redefine macro for x64 #undef SetWindowLong #undef GWL_WNDPROC #undef GetWindowLong //#undef GWL_WNDPROC #undef SetClassLong #undef GetWindowLong #undef GCL_WNDPROC #undef GWL_HINSTANCE #undef GWL_HWDPARENT #undef GWL_USERDATA #undef GCL_MENUNAME #undef GCL_HBRBACKGROUND #undef GCL_HCURSOR #undef GCL_HICON #undef GCL_HMODULE #undef GCL_WNDPROC #undef GCL_HICONSM #define SetWindowLong SetWindowLongPtr #define GWL_WNDPROC GWLP_WNDPROC #define GetWindowLong GetWindowLongPtr //#define GWL_WNDPROC GWLP_WNDPROC #define SetClassLong SetClassLongPtr #define GetWindowLong GetWindowLongPtr #define GCL_WNDPROC GCLP_WNDPROC #define GWL_HINSTANCE GWLP_HINSTANCE #define GWL_HWDPARENT GWLP_HWNDPARENT #define GWL_USERDATA GWLP_USERDATA #define GCL_MENUNAME GCLP_MENUNAME #define GCL_HBRBACKGROUND GCLP_HBRBACKGROUND #define GCL_HCURSOR GCLP_HCURSOR #define GCL_HICON GCLP_HICON #define GCL_HMODULE GCLP_HMODULE #define GCL_WNDPROC GCLP_WNDPROC #define GCL_HICONSM GCLP_HICONSM #define DX_NON_INLINE_ASM #else #endif #endif マイクロソフトのサポート http://msdn.microsoft.com/en-us/library/bb427430(v=vs.85).aspx
Re: DXライブラリを64bitにする! ( No.3 )
名前:sy(サイ) 日時:2012/03/09 20:37

WNDPROCに変換できない問題。long になってたためにエラーになっていました。windowsの定義を使って対応。 #if defined(_WIN32) #if defined(_WIN64) extern LRESULT FAR PASCAL WinSockWindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) ; // WinSock専用のウインドウのメッセージコールバック関数 #else extern long FAR PASCAL WinSockWindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) ; // WinSock専用のウインドウのメッセージコールバック関数 #endif #endif #if defined(_WIN32) #if defined(_WIN64) static LRESULT FAR PASCAL DxLib_WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) ; // メインウインドウのメッセージコールバック関数 #else static long FAR PASCAL DxLib_WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) ; // メインウインドウのメッセージコールバック関数 #endif #endif 定義部も変えてください。
Re: DXライブラリを64bitにする! ( No.4 )
名前:sy(サイ) 日時:2012/03/09 20:44

もうひとつの箇所も修正。DxGraphics2.cpp #if defined(_WIN32) #if defined(_WIN64) static VOID CALLBACK ScreenFlipTimerProc( HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime ); // テンポラリプライマリバッファの内容をプライマリバッファに転送するコールバック関数 #else static VOID CALLBACK ScreenFlipTimerProc( HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime ); // テンポラリプライマリバッファの内容をプライマリバッファに転送するコールバック関数 #endif #endif
Re: DXライブラリを64bitにする! ( No.5 )
名前:sy(サイ) 日時:2012/03/09 20:47

ここで、DxUseCLib.libがx86だと怒られました。 そちらの修正へ移りたいです。こちらのソースコードは公開されますか? もし出来るなら64bit化のお手伝いが出来ると思いますがどうでしょうか?
Re: DXライブラリを64bitにする! ( No.6 )
名前:sy(サイ) 日時:2012/03/09 21:50

あ、すいません、ありましたね。続けます。
Re: DXライブラリを64bitにする! ( No.7 )
名前:sy(サイ) 日時:2012/03/09 22:52

経過。 プロジェクトを作成中。 ttp://libpng.sourceforge.net/index.html ここの[DOWNLOAD]から入りDownload lpng159.7z (497.2 kB)リンクからpngプロジェクト一式を入手。
Re: DXライブラリを64bitにする! ( No.8 )
名前:sy(サイ) 日時:2012/03/09 23:19

http://www.ijg.org/files/ jpegプロジェクト導入。しかし問題発生。 C2371: 'INT32' : redefinition; different basic types win64 SDK内の定義とかぶった。 これはめんどそう。。 追記 jpegsrc.v6b.tar.gzは古いプロジェクトだったのでjpegsrc.v8d.tar.gzに変更。 上記のエラーがなくなりました。 更に追記 1>まいどきゅめんと\visual studio 2010\projects\dxuseclib\dxuseclib\jpeg-8d\jmorecfg.h(236): error C2371: 'boolean' : redefinition; different basic types 今度はwin64 SDKのRpcNdr.h内のbooleanが被りました。うーん、面倒だ。。 誰か、64bitのjpegライブラリを作ってないのかと思うが。。 HAVE_BOOLEANを定義することに。
Re: DXライブラリを64bitにする! ( No.9 )
名前:sy(サイ) 日時:2012/03/10 21:12

いろいろパスと押してもエラーが残る。 DxUseCLib.cpp 以下の二つのファイルに含まれる型定義が足りなかったので、png.hのすぐ下に2行追加。 #include "pngstruct.h" #include "pnginfo.h" とりあえずエラーは消えて、64bit静的ライブラリの作成に成功。 たくさんのunsafe警告が出てるのがとても気になるのでそこの修正へ・・・。 無視してもよさげな警告をシャットアウト #pragma warning(disable:4996) #pragma warning(disable:4290)

Page: 1 |