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 StudioでD言語プロジェクトを扱えるようになるツール
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を押して完了です。
※ ソリューションのディレクトリ作成はお好みでどうぞ。ただし、この記事ではチェックを外した前提で書いている為、以降適宜自分の設定に置き換えて読み進めてください。
DxLibの準備
この記事では3.11を使用します。
1.
冒頭でダウンロードしてきたD言語版DXライブラリを解凍します。
2.
以下のデータをプロジェクトのslnファイルがあるフォルダにコピー。
dx4d.d string.d dxlib311.lib dxlib311_x64.lib dataフォルダとその中身
※ x64のは大半の人は使わないと思うけど念のため。
コーディング
今回は試しに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(); }
実行結果
まとめ
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()
でやると両方とも問題なく通るのだけど。
今のところ原因は不明。
もしわかる方がいれば、教えて下さるとありがたいです。
くぅ疲。