Visual DでD言語を扱いつつ、DxLibを使ってみる

Visual Studio上でD言語を扱いつつDxLibを触る方法について色々と試してみました。
今回はIDEとしてVisual Studioを使いたいので、想定されるOSの環境はWindowsに限定します。
そもそもDxLibを使う時点でWindowsしか動かんよなー。
Visual Studio導入は既に終わっている前提で進めていきます。

用意するもの

Visual Studio 2005~2013

Shell IsolatedとShellIntegratedの組み合わせでもいける模様

Visual D

Visual D - D Programming Language - Digital Mars
Visual StudioD言語プロジェクトを扱えるようになるツール

D言語版DXライブラリ

D言語からDXライブラリを使う方法 - 羽流布の備忘録
D言語でDxLibを扱うことができるライブラリ
※ この記事を書いている時点での最新版は3.11

インストール

DMD 2 → Visual Dの順番でインストールします。

DMD 2

インストール先フォルダはお好みで。
DMD 2のインストール時のチェックボックスDMDの1と2の選択ができますが、Visual DではDMD 1は使えませんのでDMD 1のチェックは不要です。
インストール時のチェックは初期状態のままで大丈夫でしょう。

Visual D

DMD 2がWindows用のインストーラーを利用して先にインストールされていると、インストール時にDMD 2のフォルダの指定を自動で行ってくれます。
もしDMD 2を前述のインストーラーを利用せずに手動で入れていた場合は、画面の指示に従って手動で設定する必要があります。


ここまでのインストールが正常に行われていれば、Visual Studioを起動したときにメニューバー上に"VISUAL D"というタブが追加されているはずです。
もしも追加されていないようであれば、セキュリティソフトの設定などを見直してVisual Dを再インストールしてみるとよいでしょう。
筆者が導入を行った時は、Kasperskyに"VisualD.dll"が誤検知されて削除されてしまったため、少し手惑う羽目になりました。

プロジェクトの作成

この記事ではVisual Studio 2013を使用しています。

1.

Visual Studioを立ち上げ、メニューバーから
ファイル > 新規作成 > プロジェクト
を選択。

2.

新しいプロジェクトのウィンドウが開くので、左のメニューから
インストール済み > 他の言語 > D
を選択。

3.

プロジェクトの種類をWindows Applicationにして作成。
※ここで間違えてConsole Applicationを選んでしまうと、DxLibの窓生成時にコンソールの窓も生成されてしまうため注意。

4.

ソリューションのディレクトリ作成のチェックを外し、名前と場所を設定したらOKを押して完了です。
※ ソリューションのディレクトリ作成はお好みでどうぞ。ただし、この記事ではチェックを外した前提で書いている為、以降適宜自分の設定に置き換えて読み進めてください。

f:id:SiON_PN:20140721151300p:plain

DxLibの準備

この記事では3.11を使用します。

1.

冒頭でダウンロードしてきたD言語版DXライブラリを解凍します。

2.

以下のデータをプロジェクトのslnファイルがあるフォルダにコピー。

dx4d.d
string.d
dxlib311.lib
dxlib311_x64.lib
dataフォルダとその中身

x64のは大半の人は使わないと思うけど念のため。

3.

Visual Studioのメニューバーから
プロジェクト > 既存項目の追加
を選択し、2でプロジェクトのフォルダに移動した以下のファイルを追加して完了。

dx4d.d
string.d

コーディング

今回は試しにD言語くんの画像を描画してみます。
プロジェクト作成時に既にwinmain.dというソースファイルが生成されている筈なのでこれを開き、書かれているコードをすべて削除してから以下のように書き換えます。

コード

module winmain;

import dx4d;
import string;
void main()
{
	// ウィンドウの名称定義
	dx_SetMainWindowText( toCS("Visual D") );
	
	// ウィンドウサイズ指定
	dx_SetGraphMode( 640 , 480 , 32 );
	
	// ウィンドウモード
	dx_ChangeWindowMode( TRUE );

	// Dxライブラリ初期化処理
	if ( dx_DxLib_Init() == -1 )
		return;

	// 四角を描画
	dx_DrawBox( 0 , 16 , 640 , 480 , dx_GetColor( 0 , 255 , 0 ) , TRUE );

	// 画像をロードして描画
	int image=dx_LoadGraph( toCS("Image/image.png") );
	dx_DrawRotaGraph( 320 , 240 , 1.0 , 0 , image , TRUE );
	
	// printfDxがコメントアウトされていて使えなかったのでDrawStringを代用
	dx_DrawString( 0 , 0 , toCS("Hello World") , dx_GetColor( 255 , 255 , 255 ) );

	// キーの入力待ち
	dx_WaitKey();

	// Dxライブラリ使用の終了処理
	dx_DxLib_End();

}

実行結果

f:id:SiON_PN:20140721160050p:plain

まとめ

D言語用のDxLibのreadmeに

あと文字列を渡す関数については注意が必要です。
 付属している string.d を使ってください。
例)
  dx_FileRead_open( toCS( "文字列" ) );
  string str = toDS( toCS( "文字列" ) );

とあったので注意。

また、メイン関数だけども

extern (Windows)
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

でやるとdebugビルドは通るけどreleaseビルドに失敗します。
勿論、

void main()

でやると両方とも問題なく通るのだけど。
今のところ原因は不明。
もしわかる方がいれば、教えて下さるとありがたいです。

くぅ疲。