DXライブラリ

**DXライブラリ**（ディーエックス・ライブラリ、またはダイレクトエックス・ライブラリ、デラックスライブラリ）とは、2001年に山田巧がC++用に開発した、無料のコンピュータゲーム開発用ライブラリである。広義にはゲームエンジンに分類される。**DxLib**とも表記される。

ライブラリ自体の著作権は開発者の山田巧が保持しているが、ライブラリはオープンソースとして公開されている。ライブラリの使用に制限や条件は一切なく、**[[ソースコード]]配布時に限り**ライブラリの著作権表示を求めている。

## 概要
専門学校のゲーム学科で既に使用されていた一般公開されていない教材（ライブラリ）を元に、関係者の協力の下、山田巧がパソコンゲーム（Windows）用に開発した。2001年5月に初版がリリースされてから、2019年10月現在でも開発が進んでいる。名称は「**D**irect**X**ライブラリ」から由来している。

ライブラリ独特の仕様が少なく自由度が高いため、ゲームジャンルや開発規模に制約されないことを特徴に上げている。C++用のライブラリではあるがC言語の知識だけでも扱えるよう工夫されている。DirectXおよびWindows APIを意識せずに使えるように設計されているものの、プログラムのエントリーポイントは*WinMain*（その他プラットフォーム向けでは異なる）になる。基本的な設計思想について山田巧は、ライブラリの前身にあたる教材の影響を強く受けていると語っている。

2001年開発当初は、DirectXおよびWindows APIを使用しているため、全体的にWindowsに依存しておりマルチプラットフォーム設計ではなかった。2015年9月にPlayStation Vita、同年10月にPlayStation 4、2017年2月にAndroid、2018年6月にNintendo Switch、2019年3月にiOSにそれぞれ対応した。Windows版とその他プラットフォーム向けではソースコードの共有もできるが、一応対応していない関数・機能も存在する。また、有志によってPlayStation Portableで動作する派生ライブラリを開発するプロジェクトが存在する。

開発時のOSはWindows XP以降が必要である。サポートされている開発環境はVisual C++、C++ Builder (Borland C++)、Gnu C++の他にも、Visual C#用パッケージも用意されている。ライブラリ単体でDirectXが利用できるよう設計されているため、DirectXのSDKがなくてもコンパイルできる。ライブラリは静的リンク方式（`*.LIB`）でのみ提供されておりDLLは存在しない。DXライブラリのソースコードはライブラリ自体には入っておらず、山田巧により DxLibMake というファイルで別途公開されている。

公式サイトにライブラリの関数リファレンスページやサンプルプログラムが用意されているが、「主な関数の説明」とされており掲載されていない関数もある。公式リファレンスページ上で全ての関数が掲載されていない状況について、2010年10月に山田巧も「ドキュメントが整備し切れていない」と認めている。なお、公式サイトは2016年3月に一度移転している。

2015年12月、DrawFormatStringなどの文字列を渡す関数でバッファオーバーランが発生し、任意のコードを実行される脆弱性が公表された。2016年1月、JVN iPediaにて告知されIPA上にも掲載された。脆弱性は3.16で修正されている。

開発者の名前について、公式サイトや付属の説明書では山田巧で統一されているが、ミラーで配布されているベクターではハンドルネームで**夏夕樹**と名乗っている。

## 沿革
小規模なアップデートは省略する。

## サポートされている機能
ゲーム開発用に設計されたライブラリのため、ゲーム開発における関連技術を中心にサポートしている。一方で、一般的なアプリケーションの開発に必要なウィジェット（コントロール）はサポートされていない。

なお、3Dグラフィックス機能としてMikuMikuDanceのモデルファイルとモーションファイルの読み込みにも対応しているが、一部仕様に違いが見られる。

* グラフィックス関係
** 2D描画
** 3D描画
* サウンド
** サウンド再生全般
** MIDIファイルの演奏
* ムービー再生
* 入力関係
** マウス・キーボード入力
** ジョイパッド入力
* 通信関係（TCP/IP）

## サンプルプログラム
*最も一般的なHello worldプログラム

```c
#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
						 LPSTR lpCmdLine, int nCmdShow )
{
        // DXライブラリ初期化
        if( DxLib_Init() == -1 ) {
                return -1;
        }

        //文字列表示
        DrawString( 10, 10, "Hello, world", GetColor(255, 255, 255));

        //キー入力待ち
        WaitKey();

        // DXライブラリ使用の終了
        DxLib_End();

        return 0;
}
```


## 採用実績と評価
ライブラリ自体の用途に制限は一切無く、使用した旨を記載・公言する義務も課せられていないため、採用数（使用した作品数）は不明である。ただし、一部機能を使用した場合著作権・ライセンス表記が必要である。

公式サイトに使用作品を紹介するページが開設されているほか、動画投稿サイトやその他ウェブサイトなどでも使用作品が公開されている。

ライブラリを教材として授業に使用する大学や専門学校もあるほか、独自に作成した派生ライブラリを活用している事例もある。

DXライブラリについて、「（DirectXを扱うことと比較し）画像ファイルを読み込んで画面上に動かす、効果音や音楽を再生するといったゲームに欠かせない処理を簡単に実行できる。」「C言語で楽にゲームを作る機能を提供してくれる　（引用略）　一般的なゲームプログラムの組み方を学習するという意味でも、優れたライブラリ」と評価する声もある。

### 関連書籍
DXライブラリを使用したゲームプログラミングの入門書も多数発売されている。

* 14歳からはじめるC言語わくわくゲームプログラミング教室 Windows98/2000/Me/XP対応 ISBN 4-8997-7151-7
* 14歳からはじめるC言語わくわくゲームプログラミング教室 Visual Studio 2008編―Windows XP/Vista対応 ISBN 4-8997-7217-3
* 14歳からはじめるC言語わくわくゲームプログラミング教室 Visual Studio 2010編 ISBN 4-8997-7281-5
* 14歳からはじめるC言語オンラインゲームプログラミング教室 Windows XP/Vista対応 ISBN 4-8997-7240-8
* 14歳からはじめるC++わくわくゲームプログラミング教室―Windows98/2000/Me/XP対応 ISBN 4-8997-7165-7
* 14歳からはじめる リアルに動く!ゲーム物理プログラミング教室 C言語編―Windows 98/2000/Me/XP/Vista対応 ISBN 4-8997-7180-0

## 脚注

## 関連項目
* ゲームエンジン
* WOLF RPGエディター

## 外部リンク
* DXライブラリ置き場（公式サイト）
* DXライブラリPortable（PSP動作の派生ライブラリ）
* DxPortLib（似た構文を利用するマルチプラットホーム環境）