2012-03-29 65 views
9

最近、アプリケーション上でソースコードを取得しました。私が解決策を構築しようとすると、winnt.hが含まれるすべての部分でエラーが発生します。エラーコードビットを異なりますが、彼らは常にWINNT.Hにこれらの行を指す:構文エラー: ';'が見つかりませんコンパイル時に識別子 'PVOID64'の前にwinnt.h

typedef void *PVOID; 
typedef void * POINTER_64 PVOID64; 

struct { 
    DWORD crc; 
    BYTE rgbReserved[14]; 
} CRC; 

をだから、何がこの原因だろうか? winnt.hは標準ヘッダーであり、変更されていません。それは私とVS 2010、または64ビットウィンドウを使用して私と関係がありますか?それとも何らかの設定が必要なのでしょうか?

EDIT: はここで正確なエラー・コードです:

1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(290): error C2146: syntax error : missing ';' before identifier 'PVOID64' 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(290): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(8992): error C2146: syntax error : missing ';' before identifier 'Buffer' 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(8992): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(8992): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(11525): error C2059: syntax error : 'constant' 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(11525): error C2238: unexpected token(s) preceding ';' 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(11556): error C2059: syntax error : 'constant' 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(11556): error C2238: unexpected token(s) preceding ';' 
+0

正確なエラーを投稿してください – Konrad

+0

一度に2つの名前をtypedefしようとしていますか?確かにそれは標準ではありません。 – BoBTFish

+0

エラーコード –

答えて

10

あなたはwindows.hではなくwinnt.hを含める必要があります。 windows.hを含めると、それにはwinnt.hが含まれます。 winnt.hをコンパイルするのに必要なマクロが必要な場合は、このようにする必要があります。この場合

POINTER_64は、このようBaseTsd.hで定義されています

#define POINTER_64 __ptr64 

しかし、あなたがwindows.h含む前winnt.hを含めるならば、POINTER_64が定義されていません。

2

Windows SDKの設定が無効であるようです。 このエラーは、コンパイラが 'POINTER_64'ステートメントを認識できないために発生します。 この問題を回避するには、 'POINTER_64'を '__ptr64'に置き換えます。

私は最近同じ問題を抱えていました。それから、Windows SDKの最新バージョンを再インストールして、この問題を修正しました。

UPDATE @デビッドHeffernanのは、正しく使用すると、1つを持っている場合はDirectX SDKを削除するようにしてください代わりにWINNT.H

+0

が追加されました。ファンタスティック、古いプロジエクトから変換した後にこのエラーが発生しました。 これとDanil Serovの答えが私の問題を解決します! –

7

あなたはDirectXのSDKを使用している場合は、含めるとlib最後に検索するためにVC++ディレクトリを変更してみてください。

+0

あなたの答えは、(Serovの答え)、または(恐らく)それの部分を修正するためのいくつかの奇妙な勧告なしで(受け入れられた答えが次のように思われる)DirectX 8.1 SDKをターゲットとするプロジェクトをコンパイルすることで、提案する)。 –

+1

実際には、私はあなたが不適切に答える準備ができていない限り、逆の作業をしなければなりませんでした。SDK include/Executable/Libraries Directoryインスタンスを標準のInclude/Executable/Librariesディレクトリインスタンスの後に置かなければなりませんでした:** ExecutableDirectories: ** '$(ExecutablePath); C:\ DXSDK \ bin' –

+0

それはまた私のために働いた。 –

1

は手動で修正構文でWINNT.H: "はWindows.hは" 含まれるたび

typedef void * POINTER_64 PVOID64; => typedef void * POINTER_64, * PVOID64; 
+0

typedef void * POINTER_64; typedef void * PVOID64; –

+0

何かを修正する必要がある場合は投稿を編集することができます(あなたのコメントは実際に更新するはずのもののようです)。 – lxg

0

あなたがlibrdkafka使用している場合は、このエラーメッセージが表示されます。

「librdkafka/include/basetsd.h」の名前を別の名前に変更するか、 サブパスを使ってこのライブラリヘッダーにアクセスしてください!

私はこのライブラリの作成者がこのファイルをOSプラットフォームの互換性に対応させると考えています。しかし、Windows Coreと同じファイル名 "basetsd.h"を使用すると、Visual Studioが混乱するだけです。

関連する問題