プロが教えるわが家の防犯対策術!

いつもここにお世話になってますm(__)m。今回は下記の様なエラーが出てしまい、困っております(--;)。

<エラー内容>
1>C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C2146: 構文エラー : ';' が、識別子 'PVOID64' の前に必要です。
1>C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h(222) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません


エラーが起こっているのはwinnt.h内の「typedef void * POINTER_64 PVOID64;」という部分なのですが(他にもありますが)、winnt.hは弄ってないのです。

ネットで検索したところインクルードファイルディレクトリの指定の順番が怪しそうなので、「ツール」「オプション」でPlatformSDK関連が一番上に来るように変更(実行可能ファイル、インクルードファイル、ライブラリファイル)してリビルドしてみましたが結果は変わりませんでした。


他にチェックすべき点をお教え頂けると助かります。


[環境]
・WindowsXP(SP2)
・Visual Studio 2005 Professional(C++、SPなし)

A 回答 (6件)

http://www.geocities.jp/ky_webid/c/051.html
「()」(丸括弧)が有った方が良いんじゃない?
それかその行の手前で「;」が抜けているか
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>「()」(丸括弧)が有った方が良いんじゃない?
>それかその行の手前で「;」が抜けているか
質問時にも書きましたがwinnt.h自体は弄ってないのですよね(winnt.hはPlatformSDKに入ってる物です)。それを弄るというのはどうも抵抗がありまして。

ただ(私が極々初心者というのもあるのですが)こういう記述の仕方って初めて見るんですよね(--;)。やはり弄らないといけないんでしょうか・・・。

お礼日時:2007/09/19 15:46

POINTER_64


ってのは, どこでどのように定義されているんでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>POINTER_64
>ってのは, どこでどのように定義されているんでしょうか?
カーソルを当てて定義へジャンプするとその場で表示が反転します(--;)。ということは「typedef void * POINTER_64 PVOID64;」というこの行で定義ということになるんでしょうか・・・。

お礼日時:2007/09/19 15:48

http://d.hatena.ne.jp/daovb/searchdiary?word=*%5 …
この人によると、DirectX9.0が怪しいんじゃないか?
って事ですね。
POINTER_64が使われようとしているということは、64bit版モジュールを作るってことですかね?
コンパイルオプションとインクルード指定があってないような気がしなくもないです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>この人によると、DirectX9.0が怪しいんじゃないか?
確かにDirectX9.0を使用しています(Feb2007)。

>POINTER_64が使われようとしているということは、64bit版モジュールを作るってことですかね?
う~ん、当人はそのつもりではない様ですが(実はコーディングは別の人が行なっているので)、何か間違えているのかもしれません。確認してみます。

>コンパイルオプションとインクルード指定があってないような気がしなくもないです。
コンパイルオプションですか・・・。ちょと調べてみますm(__)m。

お礼日時:2007/09/19 16:00

★インクルード文の順序は?


 #include <windows.h>
 #include <winnt.h>
 という順ではどうですか?
 逆だとエラーがいっぱい出ます。
 インクルードの順も調査して見て下さい。
・以上。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>#include <windows.h>
>#include <winnt.h>
>という順ではどうですか?
ところがプロジェクト内を検索してもwinnt.hをインクルードしてる行はないのです(--)。インクルードしている他のヘッダファイル内で記述されてると思うのですが・・・。windows.h内でwindef.hをインクルードしている行があるみたいなので、windows.h>windef.h>winnt.hという流れなのかなぁと思いますが、となればコードの書き方云々ではないような気がしております(--;)。

お礼日時:2007/09/19 18:02

ん~,


1.コンパイラが 64ビット関係の予約語を知らない
2.インクルードファイルの検索順序がおかしい
くらいしか想像できないですね....
まず問題の POINTER_64 ですが, これは BaseTsd.h で __ptr64 として (あるいは空文字列として) #define されます (BaseTsd.h 自体は winNT.h でインクルードされる). ということで, 何らかの事情で「64ビットモードでコンパイルする」ような (記号の) 定義があるにもかかわらずコンパイラが 64ビット関係の予約語を知らないと,
typedef void * __ptr64 PVOID64;
という文になってエラーとなります (__ptr64 を予約語だと思えば OK).
もう 1つの問題として, POINTER_64 を定義するはずの BaseTsd.h が, 実は VC8 には 3個あります. なので, 間違ったインクルード順序だとおかしなことになります.
    • good
    • 1
この回答へのお礼

回答ありがとうございます。また、お例が遅くなり申し訳ありませんでした。

実は環境が使えなくなってしまいまして、確認がとれない状態が続いております。折角回答頂いたのに申し訳ない限りでございますm(__)m。

お礼日時:2008/08/07 16:57

私も同エラーが出ました。



lib か include ファイルかは記憶が曖昧ですが、
複数のDirectSDKがディレクトリに追加されているときに起こりました。
その時は優先度の低い(最上段ではない)ディレクトリのパスを削除することで解消できました。
今回のケースは判りませんが…

この回答への補足

回答下さった皆様ありがとうございましたm(__)m。

現在開発環境が無い状態になってしまっており、頂いたアドバイスを生かせない状態です。ですので、この質問は一端閉め切ることに致しました(住居移動に加え、メール設定をしていなかったので放置になってちまいました)。

本来なら皆様にポイントを進呈したいのですが、制限があるそうなので申し訳ありません。

重ねてお礼を申し上げます。ありがとうございました。

補足日時:2008/08/07 16:58
    • good
    • 0
この回答へのお礼

回答ありがとうございます。また、お例が遅くなり申し訳ありませんでした。

実は環境が使えなくなってしまいまして、確認がとれない状態が続いております。折角回答頂いたのに申し訳ない限りでございますm(__)m。

お礼日時:2008/08/07 16:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!