Ruby2.0.0-mswin32版のDXRuby1.4.0

作ってみたのでWikiに置いといた。
http://dxruby.sourceforge.jp/cgi-bin/hiki.cgi?%A5%D5%A5%A1%A5%A4%A5%EB%C3%D6%A4%AD%BE%EC

Rubyのmswin32版というのはVCでビルドしたRubyのうちmsvcrt.dllをリンクするバージョンであり、これを作るにはVC6.0が必要である。なので本来であればVC6.0でビルドされたRuby2.0を用意して、同様にVC6.0で拡張ライブラリをビルドするという手順になる。
また、mingw32版はmsvcrt.dllをリンクするがmingw32を使ってビルドしたもので、VC6.0で作ったバイナリと互換性がある。だからmswin32版の拡張ライブラリがそのままmingw32版のRubyで使える。

現状VC6.0など手に入らないが、Ruby1.9.2まではVC6.0でビルドされたRubyバイナリが公開されていたので、それにリンクするようにVC2008でビルドしたものがDXRubyである。ただ、VC2008ではmsvcrt.dllをリンクすることができないので(msvcr90.dllになっちゃう)、msvcr90.dllをスタティックリンクしてある。Ruby本体のやつと干渉しないように気をつけてあれば問題は無い。
VC6.0でビルドされたRubyが無い場合はmingw32でビルドすればいいという話にもなるが、もともとVCで作っていたDirectXを使うコードなだけに、mingw32で作るのは骨が折れる。環境をmingw32に移した場合にVCでもビルドできるように気をつけるというのも大変だ。

Ruby2.0用DXRuby1.4.0はVC2008でビルドしたが、Ruby2.0はVC6.0でビルドされたバイナリが公開されていないのでちょっと細工した。
手順は、
(1) 自前でRuby2.0.0をVC2008でビルドする。
(2) mingw32のRuby2.0.0をインストールする。
(3) mingw32のmsvcrt-ruby200.dllからdumpbin.exeとlib.exeを使ってlibファイルを作る。
(4) (1)で作ったRuby2.0.0のヘッダファイルと(3)で作ったlibファイルを参照してDXRubyをビルドするようにmakefileを作る。
(5) DXRubyをビルドする。

まあ、強引だが、理屈としてはこれでいけるんじゃないかと思う。Ruby2.0.0でDXRubyを使いたい人はartonさんのmswin32-100版を使うか、RubyInstallerやpikで入れたmingw32版にWikiのやつを入れて使ってみてくださいな。