むずかしいことはわかりません

いろいろ書いてるみたいな

DXRubyがRuby3.2.4(win64)環境で動かなかった件

DXRuby1.4.7で64bit対応されているということで使おうと思ったけど、

Windowが作れないエラーが出てしまうのでしばらく諦めてた

 

休みになんかしないと落ち着かないので動かないのを再調査したところ

64環境ではウィンドウが作れないことがエラーに起因しているみたいなので

その辺を調べてみた

「CreateWindow 64」みたいな適当な検索してみたら、StackOverflowで

以下のような記事があった。

stackoverflow.com

 

なにやら

>WPARAM と LPARAM は UINT_PTR と LONG_PTR で定義されている

>ポインターサイズとして定義されているので32bitと64bitじゃ

>サイズが違う
>UINTとLONGは、32bitと64bitどちらも同じサイズになる
ということらしくて、返ってくるポインタのサイズを考えれば大丈夫らしい

 

messagethread.cにウィンドウプロシージャMessageThreadWndProcがあって

こちらの定義が文字通り、UINTとLONGだった。

LRESULT CALLBACK MessageThreadWndProc( HWND hWnd,UINT msg,UINT wParam,LONG lParam )

↓ WPARAM/LPARAMに変更する

LRESULT CALLBACK MessageThreadWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )

 

あとはビルド方法に従ってビルドをすれば、dxruby.soができあがるのでテスト用に別フォルダにコピーして、requireの行をローカルから読むように修正した。

おかげさまでサンプルは起動したので当初の目標は達成。

しかし、なぜ前回起動しないなーってときにこの部分に気づかなかったのか。

が、またdxruby起動するようになってよかったよかった。

 

 

GitHubのdxRubyリポジトリはこちら

github.com