WiiYourself + WDKでPASSIVE_LEVELの未定義エラー対処方法 [フリーランスエンジニア]
WiiリモコンをWindowsで使うSDKとして、WiiYourself!というものがあります。
【公式サイト(英語):WiiYourself!】
今回、これをVisualC++ 2008 Expressでコンパイルするのに手間取ったので覚え書きとして残しておきます。
めずらしくプログラムの話題です。
★ ★ ★
☆環境
Windows7 64bit (ただし、MacBookProでBootcamp使ってます)
VisualC++ 2008 Express
☆インストール&環境設定手順
1.WiiYourself!ダウンロード
【WiiYourself!】のページから、WiiYourselfのzipをダウンロード。(2012/06/24時点のバージョンはv1.15でした)
zipなので適当な場所に解凍しておきます。(sdkだけじゃなくて、中にDemoのプログラムも入っています)
2.WDKダウンロード
【Windows Driver Kit Version 7.1.0】をダウンロードしてインストールします。(最新版はVisualStudioと統合された様ですが、今回は試していません)
インストーラーを起動するとインストールするものが選択できるのですが、今回は「Build Environments」と「Tools」だけにしてみました。(参考:【WiiYourself!の導入】)
3.サンプルのコンパイルを通す
まずはサンプルの動作と思って、展開した、
WiiYourself!_1.15\Demo\VC2008
にあるslnファイルを開き、前記のサイト【WiiYourself!の導入】のとおりに、
includeパス
C:\WinDDK\7600.16385.1\inc\ddk
C:\WinDDK\7600.16385.1\inc\api
libパス
C:\WinDDK\7600.16385.1\lib\win7\i386
と設定し、includeは色々なincludeパスがある中で一番下に移動しました。
しかし、ここでコンパイルすると、
c:\winddk\7600.16385.1\inc\api\hidpi.h(302) : error C2065:
'PASSIVE_LEVEL' : 定義されていない識別子です。
c:\winddk\7600.16385.1\inc\api\hidpi.h(303) : error C4430:
型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
c:\winddk\7600.16385.1\inc\api\hidpi.h(303) : error C2146: 構文エラー :
';' が、識別子 'NTSTATUS' の前に必要です。
c:\winddk\7600.16385.1\inc\api\hidpi.h(303) : error C2143: 構文エラー :
';' が '__stdcall' の前にありません。
みたいなエラーが100個以上出てコンパイルが通りませんでした。
んで、ここで1時間ほどハマりました。
PASSIVE_LEVELやWiiYourselfで検索しても、みなさん簡単には解決できていないようでして。。。
【WiiYourself! - john.smithの日記】
【Trouble with hidpi.h from WDK, trying to use WiiYourself - General ...】
【Trouble with hidpi.h from WDK, trying to use WiiYourself】
一番最初の方は自分なりにソースを修正して対応されていますね。
私はソースを修正してまで解決する気力がないまま、WindowsSDKを入れようとしてみたり、MSDNのドキュメントを入れようとしてみたりして迷走しました。
んで、どういう検索条件で調べたか忘れたのですが、【WDK (Windows Driver Kit) and VC++ headers problem】というStackOverflowの記事を見つけまして、この回答の通りincludeパスの設定を
C:\WinDDK\7600.16385.1\inc\ddk
$(VCInstallDir)include
$(VCInstallDir)atlmfc\include
C:\WinDDK\7600.16385.1\inc\api
$(WindowsSdkDir)\include
$(FrameworkSDKDir)include
と変えるとコンパイルエラーは出なくなりました。やった。
ただ、なんかビルドの最後に、
- Copying .exe to demo dir -
指定されたファイルが見つかりません。
Project : error PRJ0019: ツールはエラー コードを返しました : "- Copying .exe to demo dir -"
という表示が出てビルドは完成せず。
コンパイル&リンクは通っていて、その後、生成されたexeファイルをどこかにコピーしようとして失敗してるみたいなので、
「プロジェクト」→「demoのプロパティ」→「ビルドイベント」→「ビルド後のイベント」
と開くと、「コマンドライン」の中に、
copy $(TargetPath) $(ProjectDir)
というのがありました。
これが、コンパイル後にできた、
WiiYourself!_1.15\Demo\VC2008\Debug\Demo.exe
を、
WiiYourself!_1.15\Demo
にコピーする処理っぽくて、ここでエラーがでていました。
・・・んで、ここをなんとかしようと思ったのですが、色々試すもうまくいかず、ずいぶん時間もたって疲れてきたし、まぁexeはできてるし、もういいやと思って削除しました。
4.サンプルの実行環境
ということで、できたプログラムをVSから実行しみてると、実行した画面に
can't find 'sine16.raw'
みたいなのが出てエラーを表示して止まってしまいました。
ファイル読み込みで失敗しているっぽいので、パスの問題かな?と思い、
WiiYourself!_1.15\Demo
にある、rawとwavのファイル(4つ)を、
WiiYourself!_1.15\Demo\VC2008
にコピーしてみたところ、無事に起動させることができました。
5.Wiiコントローラーのセットアップと確認
ここでやっと押し入れの奥からWiiリモコンをひっぱりだして、
【wiiyourself!のvisual studio 2005(c++)での使い方を簡単にまとめました】を参考にしながら、WindowsのBlueToothの設定をしてWiiリモコンをデバイス登録。
その後、Demoアプリを動かすと、無事にリモコンの値が取れている様です。
めでたしめでたし。
★ ★ ★
今回はゲームプログラムの勉強をしている方から相談されて調べたのですが、意外に手間取ってしまいました。
やりたいことの前にこういう環境設定がうまくいかないと、特に初学者の方は心が折れますよね。
とにかくなんとか動いてよかったです。
【公式サイト(英語):WiiYourself!】
今回、これをVisualC++ 2008 Expressでコンパイルするのに手間取ったので覚え書きとして残しておきます。
めずらしくプログラムの話題です。
★ ★ ★
☆環境
Windows7 64bit (ただし、MacBookProでBootcamp使ってます)
VisualC++ 2008 Express
☆インストール&環境設定手順
1.WiiYourself!ダウンロード
【WiiYourself!】のページから、WiiYourselfのzipをダウンロード。(2012/06/24時点のバージョンはv1.15でした)
zipなので適当な場所に解凍しておきます。(sdkだけじゃなくて、中にDemoのプログラムも入っています)
2.WDKダウンロード
【Windows Driver Kit Version 7.1.0】をダウンロードしてインストールします。(最新版はVisualStudioと統合された様ですが、今回は試していません)
インストーラーを起動するとインストールするものが選択できるのですが、今回は「Build Environments」と「Tools」だけにしてみました。(参考:【WiiYourself!の導入】)
3.サンプルのコンパイルを通す
まずはサンプルの動作と思って、展開した、
WiiYourself!_1.15\Demo\VC2008
にあるslnファイルを開き、前記のサイト【WiiYourself!の導入】のとおりに、
includeパス
C:\WinDDK\7600.16385.1\inc\ddk
C:\WinDDK\7600.16385.1\inc\api
libパス
C:\WinDDK\7600.16385.1\lib\win7\i386
と設定し、includeは色々なincludeパスがある中で一番下に移動しました。
しかし、ここでコンパイルすると、
c:\winddk\7600.16385.1\inc\api\hidpi.h(302) : error C2065:
'PASSIVE_LEVEL' : 定義されていない識別子です。
c:\winddk\7600.16385.1\inc\api\hidpi.h(303) : error C4430:
型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
c:\winddk\7600.16385.1\inc\api\hidpi.h(303) : error C2146: 構文エラー :
';' が、識別子 'NTSTATUS' の前に必要です。
c:\winddk\7600.16385.1\inc\api\hidpi.h(303) : error C2143: 構文エラー :
';' が '__stdcall' の前にありません。
みたいなエラーが100個以上出てコンパイルが通りませんでした。
んで、ここで1時間ほどハマりました。
PASSIVE_LEVELやWiiYourselfで検索しても、みなさん簡単には解決できていないようでして。。。
【WiiYourself! - john.smithの日記】
【Trouble with hidpi.h from WDK, trying to use WiiYourself - General ...】
【Trouble with hidpi.h from WDK, trying to use WiiYourself】
一番最初の方は自分なりにソースを修正して対応されていますね。
私はソースを修正してまで解決する気力がないまま、WindowsSDKを入れようとしてみたり、MSDNのドキュメントを入れようとしてみたりして迷走しました。
んで、どういう検索条件で調べたか忘れたのですが、【WDK (Windows Driver Kit) and VC++ headers problem】というStackOverflowの記事を見つけまして、この回答の通りincludeパスの設定を
C:\WinDDK\7600.16385.1\inc\ddk
$(VCInstallDir)include
$(VCInstallDir)atlmfc\include
C:\WinDDK\7600.16385.1\inc\api
$(WindowsSdkDir)\include
$(FrameworkSDKDir)include
と変えるとコンパイルエラーは出なくなりました。やった。
ただ、なんかビルドの最後に、
- Copying .exe to demo dir -
指定されたファイルが見つかりません。
Project : error PRJ0019: ツールはエラー コードを返しました : "- Copying .exe to demo dir -"
という表示が出てビルドは完成せず。
コンパイル&リンクは通っていて、その後、生成されたexeファイルをどこかにコピーしようとして失敗してるみたいなので、
「プロジェクト」→「demoのプロパティ」→「ビルドイベント」→「ビルド後のイベント」
と開くと、「コマンドライン」の中に、
copy $(TargetPath) $(ProjectDir)
というのがありました。
これが、コンパイル後にできた、
WiiYourself!_1.15\Demo\VC2008\Debug\Demo.exe
を、
WiiYourself!_1.15\Demo
にコピーする処理っぽくて、ここでエラーがでていました。
・・・んで、ここをなんとかしようと思ったのですが、色々試すもうまくいかず、ずいぶん時間もたって疲れてきたし、まぁexeはできてるし、もういいやと思って削除しました。
4.サンプルの実行環境
ということで、できたプログラムをVSから実行しみてると、実行した画面に
can't find 'sine16.raw'
みたいなのが出てエラーを表示して止まってしまいました。
ファイル読み込みで失敗しているっぽいので、パスの問題かな?と思い、
WiiYourself!_1.15\Demo
にある、rawとwavのファイル(4つ)を、
WiiYourself!_1.15\Demo\VC2008
にコピーしてみたところ、無事に起動させることができました。
5.Wiiコントローラーのセットアップと確認
ここでやっと押し入れの奥からWiiリモコンをひっぱりだして、
【wiiyourself!のvisual studio 2005(c++)での使い方を簡単にまとめました】を参考にしながら、WindowsのBlueToothの設定をしてWiiリモコンをデバイス登録。
その後、Demoアプリを動かすと、無事にリモコンの値が取れている様です。
めでたしめでたし。
★ ★ ★
今回はゲームプログラムの勉強をしている方から相談されて調べたのですが、意外に手間取ってしまいました。
やりたいことの前にこういう環境設定がうまくいかないと、特に初学者の方は心が折れますよね。
とにかくなんとか動いてよかったです。