• D言語用 DirectX モジュール version 1.1.2

    2013年06月07日 00時17分
    directx_1_1_2.zip

    • dmd2.063でコンパイルを確認
  • 続 D言語とWindows 64bit

    2013年02月24日 02時11分
    実際64bitアプリは作れるのか?と思ったので作ってみました。
    毎度おなじみのフルHDテトリス

    ソースなど

    WindowsとDirectXのモジュールにいくらか64bit用の定義を足す必要がありましたが、
    特別の苦労はなく普通に動きました


    普通に動いているのでとても不安です


    大容量のメモリを使うわけでなければ64bit用のアプリを作る理由は特に無いのですが
    VCのリンカが使えるというのは何かの時に有利になるかもしれません。
  • D言語用 DirectX モジュール version 1.1.1

    2013年02月24日 02時02分
    directx_1_1_1.zip

    • 64bit用のコードを少し足しました
    • dmd2.062でコンパイルを確認
  • D言語とWindows 64bit

    2013年01月09日 00時16分
    dmd 2.061でWindows 64bitがサポートされました。
    しかしビルドするだけでも一苦労だったのでメモっておきます。


    64bitコンパイルオプション

    64bitでビルドするオプションは-m64です。
    dmdのUsageに出てこないので気づきにくいと思います。


    リンカ

    64bitビルドではVCのリンカを使うようになっています。
    よってVCのリンカのパスを設定する必要があり、sc.iniLINKCMD64で指定します。
    私の環境ではMicrosoft Visual Studio 2012 Expressを入れていたので下記のようになりました。
    LINKCMD64=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_amd64\link.exe

    この辺りはご利用の環境に合わせて調整してください。

    参考ですが、私の環境だとlink.exeの実行時にmspdb110.dllが見つからないと言われました。
    mspdb110.dllはC:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDEにあるのですが
    パス設定が面倒なのでlink.exeと同じフォルダにコピーしました。
    訂正: mspdb110.dllをコピーで置いてしまうとVSの動作に影響が出るので、置いてあるフォルダを環境変数PATHに追加します。


    VCINSTALLDIRの設定

    sc.iniに増えた謎の変数VCINSTALLDIRはVCのlibフォルダを参照するための物です。
    VCのlibフォルダにあるCランタイムライブラリ等が必要になるためです。

    もちろんLIB変数にVCのlibフォルダを直接設定しても動くのですが、
    32bit版と混ざるのでVCINSTALLDIRを設定した方がいいでしょう。

    この変数がどう使われるかはdmd2\src\dmd\link.cを見ればわかります。
    1const char *vcinstalldir = getenv("VCINSTALLDIR");
    2if (vcinstalldir)
    3{   cmdbuf.writestring(" \"/LIBPATH:");
    4    cmdbuf.writestring(vcinstalldir);
    5    cmdbuf.writestring("lib\\amd64\"");
    6}

    linkのオプションに/LIBPATH:として指定しています。

    よって私の環境では以下のような設定になりました。
    VCINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\

    ※プログラムを見るとわかりますが、最後のバックスラッシュが必須です。


    WindowsSdkDirの設定

    sc.iniに増えたもう一つの謎変数WindowsSdkDirはWindows SDKのlibフォルダを参照するための物です。
    Windows用の各種libが必要になるためです。

    こちらもLIB変数でも指定できますが、VCINSTALLDIRと同じ理由でWindowsSdkDirを設定した方がいいでしょう。

    変数の使われ方についてもVCINSTALLDIRと同じです
    1const char *windowssdkdir = getenv("WindowsSdkDir");
    2if (windowssdkdir)
    3{   cmdbuf.writestring(" \"/LIBPATH:");
    4    cmdbuf.writestring(windowssdkdir);
    5    cmdbuf.writestring("lib\\x64\"");
    6}


    私の環境ではWindows SDK for Windows 7をインストールしてあったので以下のような設定になりました。
    WindowsSdkDir=C:\Program Files\Microsoft SDKs\Windows\v7.1\




    以上で64bit版Windowsのビルドは出来ます。
    ただ、本格的にWindows用プログラムを書こうと思うと
    Windowsモジュールの64bit対応が必要になってくるのでどうしようかと思うわけです。
  • D言語用 DirectX モジュール version 1.1.0

    2012年08月03日 12時47分
    directx_1_1_0.zip

    • jp.ku6.windows.win32api.objectarrayの追加
    • jp.ku6.windows.win32api.structuredqueryconditionの追加
    • jp.ku6.windows.win32api.shobjidlの追加
    • jp.ku6.windows.win32api.shtypesの追加
    • jp.ku6.windows.win32api.propidlの追加
    • jp.ku6.windows.win32api.propsysの追加
    • jp.ku6.windows.win32api.objfwdの削除
    • モジュール追加/削除に合わせて参照関係の調整
    • dmd2.060でコンパイル確認