これまでも何度かDに移植されてきたDXライブラリですが
最新版のDXライブラリに対応したポーティングライブラリがないので作成しました。
githubに上がっているのでご自由にお使いください。
dxlib-d自体の作成手順もリポジトリに同梱しています。
dxlib-d利用手順
必要なもの
- DMD
- LDCやGDCでの動作は未確認です
- VisualC++
- ライブラリファイルが必要です
- 本家DXライブラリ本体
- ライブラリファイルが必要です
- VisualC++用のファイルを入手してください
- 軽量化パッケージでも動きます
- dxlib-d
- dxlib.dが必要です
ビルド方法
ysnr氏によるdxlib4dや羽流布氏によるD言語版DXライブラリと違い、
スタティックライブラリを直接リンク(64ビット)する方式をとっています。
なお、3.16fの頃はUnicodeビルドを使用していましたが
3.21f時点でマルチバイト(UTF-8)に限定しています。
関数名は本家及びdxlib4dに合わせています。
-
sc.iniの設定
64ビットでのコンパイルができるように
VisualC++のライブラリパスを指定してください[Environment64] LIB=(DMD自体のライブラリのパス) LIB=%LIB%;(VisualC++のライブラリのパス)
-
ご自身のソースとdxlib.d、DXライブラリのlibファイル群を指定してコンパイル
dmd -m64 source.d dxlib.d DxDrawFunc_x64 DxLib_x64.lib ...
必要なlibは
dir *x64.lib | findstr -v "_vs20 W_ DxUseCLib_"
などで抽出できます。
もっとも、pragma libを使用するなりMakefileを書くなりしたほうが良いでしょう。
pragma libを使用したサンプルがリポジトリに同梱にしてありますので参考にしてください。
dxlib-dに使用されているD言語の最新(?)の技術
D2.066.0からextern(C++, namespace)が実装されたことにより劇的に自動変換を行いやすくなりました。
ただnamespace付きのexternを複数置くとconflictが発生してしまうので今後の修正に期待です。
3.21f対応にあたって
totoki-keiさんの記事を参考にさせていただきました。
https://gist.github.com/totoki-kei/7ff79c4bcac9f583771fdff57c073066
いずれ
- DrawStringとかに.toStringzをつけなくても動作できるようにしたい
- GetHitKeyStateAllなどの引数をubyte[256]でも受け付けるようにしたい
終わりに
まだまだ検証は行われていません。
コンパイルができることを目標にしたのでスクリプトの質もかなり雑です。
(予約語に近い変数名が出てきたらバグる可能性大です)
致命的なバグやもっといい変換方法がある場合はぜひ教えてくださいませ。
htodのアプデはよ