何で出るんだ!『PVOID64』エラー?
最初に言っておこう…。
これは、初心者が陥るトラブルだと!
でも、脱出するのに四苦八苦したので…
ここにメモしておこう…。(泣)
さて、何が起こったかと言うと…
『Windows 2000 / Visual Studio 6』で作った『DirectX』プログラムを
『Windows Vista / Visual Studio 2008 Express Editions』で
コンパイルしたときの事。
ちなみにVC8は、初心者です…。(汗)
『~.dsw』をVC8に放り込むとプロジェクトを勝手に
『~.sln』へ変換するのは今まで通りで良いのだが…
以下のエラーが発生した。
『1>C:\Program Files\Microsoft SDKs\Windows\v6.0A\include\winnt.h(236) : error C2146: 構文エラー : ';' が、識別子 'PVOID64' の前に必要です。』
はあ?
『PVOID64』なんてシステム定義のはず。
エラーが出るなんて有り得ないだろう!?
試しに新規で空のプロジェクトを作り
ダミーの『WinMain』を用意する。
『PVOID64』を書いてもエラーが出ない…?
ならばとダイレクトXの参照を設定してみる。
そしてコンパイルするとエラーが出た!
つまり『追加のインクルードディレクトリ』を設定すると
エラーが発生する。
…
VC6だと起こらないのに何が違うのか?
『追加のインクルードディレクトリ』の参照ボタンを押してみた…。
もしかして…
VC6だとまず最優先でVC6内のインクルードを参照するのだが
VC8だと『追加のインクルードディレクトリ』に追加されたものが
最優先に参照されるのか?
試しに『c:\program files\microsoft sdks\windows\v6.0a\include』を追加設定してみる。
設定されるとこう表示される。
で、コンパイルをしてみる。
出なくなった…。(汗)
…
何だよ、この設定!
…
って思ったが…
32ビットOSと64ビットOSの両方をコンパイルできるように
柔軟性を持たせた結果なのかな…。
実際『Windows98』って項目に書いてあったし…。
ヘッダーの中身も『#if』で切り分けたとしても、
既に結構ごちゃごちぇになりつつあるしね。
この仕組みならこっちは32ビット用ヘッダ、こっちは64ビットヘッダってコンパイル設定で簡単に切り替えられるのは柔軟で良いんじゃない。
でも、原因特定に時間がかかって
ちょっと泣きが入りましたよ!(汗)
| 固定リンク
コメント