7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【dxlib-d】DXライブラリをDに移植してみた【3.21f対応】

Last updated at Posted at 2015-12-23

これまでも何度か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に合わせています。

  1. sc.iniの設定
    64ビットでのコンパイルができるように
    VisualC++のライブラリパスを指定してください

    [Environment64]
    LIB=(DMD自体のライブラリのパス)
    LIB=%LIB%;(VisualC++のライブラリのパス)
    
  2. ご自身のソースと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のアプデはよ

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?