DirectX9.0c用ライブラリ Luna導入メモ

入手したLunaのアーカイブ
LunaDx9_SDK_35.58.exe 27-Jan-2008 15:16 8.8M
導入先
Windows XP SP3
IDE
Microsoft Visual C++ 2005(Microsoft Visual Studio 2005 Version 8.0.50727.762)
事前に導入したソフト

注意

  • LunaではDirectMusicを利用している.November 2007以降はこれが除去されているのでAugust 2007を導入する
  • LunaではDirectShowを利用している.いつの頃からかPlatform SDKに移管された.現在はWindows SDKと名を変えているのでこれを導入する
  • Windows SDKとDirectX SDKのアップデート(2008/07/12)によれば,冒頭に示したWindows SDKは最新でない
    • 最新版は英語ページのみで公開されている
    • 面倒なので最新版は入れないままにする
      • 今回導入したものはv6.0で,最新版はv6.1となっている
    • 現況にて記述しているが,最新版を入れた.冒頭のリンク修正は面倒なのでしていない
  • Luna運用前にluna.hを編集する必要がある
    • 現況にて述べているとおり,luna.h第62行を次のように書き換える.数値に付けられている括弧を取り去るのみ
#define _WIN32_WINNT 0x0400

Visual Studioのパス設定

DirectX SDK

自動的に追加されるため,触る必要なし.

Windows SDK

bin, lib, includeをセットする.

Luna

lib, includeをセットする.

現況(上部が新しい)

ins datetime="2008-08-19T17:08:13+09:00"

「luna __amsg_exit」で検索すると静的変数を使用してFPSを表示する。についてが引っかかった.なるほどVisual Studio 2005での設定方法で触れられてはいたが,違いが分からなかったので放置していた設定だ.該当箇所を,Debugでは/MTd,Releaseでは/MTとした.ビルドに成功した.デバッグビルド・実行,リリースビルド・実行のいずれも達成した.

del datetime="2008-08-19T17:05:01+09:00"

luna.h第62行で_WIN32_WINNTを(0x0400)と定義していた.これの括弧を取り去ると,変化が現れた.

1>------ ビルド開始: プロジェクト: [01]test, 構成: Debug Win32 ------
1>コンパイルしています...
1>main.cpp
1>リンクしています...
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit は既に MSVCRTD.lib(MSVCR80D.dll) で定義されています。
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __initterm_e は既に MSVCRTD.lib(MSVCR80D.dll) で定義されています。
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit は既に MSVCRTD.lib(MSVCR80D.dll) で定義されています。
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __exit は既に MSVCRTD.lib(MSVCR80D.dll) で定義されています。
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __cexit は既に MSVCRTD.lib(MSVCR80D.dll) で定義されています。
1>LIBCMT.lib(invarg.obj) : error LNK2005: __invoke_watson は既に MSVCRTD.lib(MSVCR80D.dll) で定義されています。
1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_a は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
1>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z は既に MSVCRTD.lib(cinitexe.obj) で定義されています。
1>LIBCMT.lib(tidtable.obj) : error LNK2005: __encode_pointer は既に MSVCRTD.lib(MSVCR80D.dll) で定義されています。
1>LIBCMT.lib(tidtable.obj) : error LNK2005: __decode_pointer は既に MSVCRTD.lib(MSVCR80D.dll) で定義されています。
1>LIBCMT.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) は既に MSVCRTD.lib(MSVCR80D.dll) で定義されています。
1>LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter は既に MSVCRTD.lib(MSVCR80D.dll) で定義されています。
1>LIBCMT.lib(setlocal.obj) : error LNK2005: __configthreadlocale は既に MSVCRTD.lib(MSVCR80D.dll) で定義されています。
1>LIBCMT.lib(errmode.obj) : error LNK2005: ___set_app_type は既に MSVCRTD.lib(MSVCR80D.dll) で定義されています。
1>LIBCMT.lib(mlock.obj) : error LNK2005: __unlock は既に MSVCRTD.lib(MSVCR80D.dll) で定義されています。
1>LIBCMT.lib(mlock.obj) : error LNK2005: __lock は既に MSVCRTD.lib(MSVCR80D.dll) で定義されています。
1>LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
1>LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
1>(中略)\My Documents\Visual Studio 2005\Projects\Luna\[01]test\Debug\[01]test.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
1>ビルドログは "file://(中略)\My Documents\Visual Studio 2005\Projects\Luna\[01]test\Debug\BuildLog.htm" に保存されました。
1>[01]test - エラー 19、警告 2
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
del datetime="2008-08-19T16:55:46+09:00"

_WIN32_WINNTというマクロがluna.hとobjbase.hとで多重定義されている.___LUNA_DX9___マクロを利用して,objbase.hを次のように編集してみた.

#ifndef ___LUNA_DX9___
#if(NTDDI_VERSION >= NTDDI_VISTA && !defined(_WIN32_WINNT))
#define _WIN32_WINNT 0x0600
#endif

#if(NTDDI_VERSION >= NTDDI_WS03 && !defined(_WIN32_WINNT))
#define _WIN32_WINNT 0x0502
#endif

#if(NTDDI_VERSION >= NTDDI_WINXP && !defined(_WIN32_WINNT))
#define _WIN32_WINNT 0x0501
#endif

#if(NTDDI_VERSION >= NTDDI_WIN2K && !defined(_WIN32_WINNT))
#define _WIN32_WINNT 0x0500
#endif
#endif // #ifndef ___LUNA_DX9___

事態は変わらなかったので,元に戻した.

del datetime="2008-08-19T16:50:41+09:00"

Lunaを使おう! - SDKのインストールを参照し,October 2004の導入を視野に入れた.

del datetime="2008-08-19T16:44:02+09:00"

先と同様の事態になった.違いは第235行に変化したことのみ.

del datetime="2008-08-19T16:30:25+09:00"

事態が進展しないので,いっそWindows SDKは最新版を入れることにした.ファイルサイズはv6.0と同等で,15分あまりでダウンロードが完了した.インストーラは英語だった.

del datetime="2008-08-19T15:54:40+09:00"

次のメッセージに悩んでいる.

c:\program files\microsoft sdks\windows\v6.0\include\sdkddkver.h(200) : fatal error C1012: かっこが一致していません。')' がありません。

該当行の記述を示す.

#if (((OSVERSION_MASK & NTDDI_VERSION) == NTDDI_WIN2K) && (_WIN32_WINNT != _WIN32_WINNT_WIN2K))
del datetime="2008-08-19T14:48:16+09:00"

Windows SDKダウンロードに手間取っている.1356.8 MBとのこと.あと20分かかる.(実際には13分あまりで終了した)