2012-03-29 24 views
9

derlenirken 'PVOID64' tanımlayıcısından önce bir uygulamada kaynak kodunu aldım. Çözümü oluşturmaya çalışırken, winnt.h'un bulunduğu tüm bölümlerde bir hata alıyorum. hata kodları biraz farklıdır, ama her zaman winnt.h bu satırları işaret:sözdizimi hatası: ';' eksik winnt.h

typedef void *PVOID; 
typedef void * POINTER_64 PVOID64; 

ve So

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

, ya bu nedeni olabilir? winnt.h standart bir başlıktır ve değiştirilmemiştir. VS 2010'u kullanarak veya 64-bit pencereleri kullanarak benimle bir ilgisi var mı? ya da ihtiyaç duyulan bir çeşit yapılandırma mı?

DÜZENLEME: İşte tam hata kodları var:

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

Lütfen tam hataları gönderin – Konrad

+0

Aynı anda iki ad yazmayı deniyor gibi görünüyor mu? Standart olduğundan emin değilsin. – BoBTFish

+0

Hata kodları eklendi –

cevap

10

Sen windows.h yerine winnt.h eklemeniz gerekir. windows.h'u eklediğinizde, winnt.h'u dahil edin. winnt.h'u derlemek için gerekli makroların olması için bu şekilde yapmanız gerekir.

#define POINTER_64 __ptr64 

Ama windows.h eklemeden önce winnt.h eklerseniz o zaman POINTER_64 tanımlanmadı:

Bu durumda

, POINTER_64 böyle BaseTsd.h tanımlanmıştır.

2

Windows SDK yapılandırmanızın geçersiz olduğu anlaşılıyor. Bu hata, derleyicinin 'POINTER_64' ifadesini tanıyamadığı gerçeğinden kaynaklanmaktadır. Bu sorunu 'POINTER_64' yerine '__ptr64' ile değiştirerek geçici bir çözüm yapabilirsiniz.

Son zamanlarda aynı sorunu yaşadım. Sonra Windows SDK'nın en son sürümünü yeniden kurdum ve bu da sorunu çözdü.

GÜNCELLEME @ David Hefferman, doğru bir windows.h yerine winnt.h eğer varsa DirectX SDK kaldırmak için

+0

Fantastik, eski bir projeden bir dönüşüm sonra bu hatayı yaşıyorum. Hem bu hem de Danil Serov'un cevabı problemimi çözüyor! –

7

, başlık ve kütüphane son aranacak için VC++ Dizinler değiştirmeyi deneyin.

+0

Teşekkürler. Cevabınız, sorunun giderilmesi (DirectX 8.1 SDK'sini hedefleyen/içeren bir projenin derlenmesi) için bazı garip tavsiyelerde bulunmadan (Serov'un cevabı), veya (muhtemelen) parçalarını değiştirdiği anlaşılıyor (kabul edilen cevap gibi görünüyor) önermek). –

+1

Aslında, tam tersini yapmak zorundaydım (yanlış okumuş olduğunuzu okumadığım sürece). SDK include/Executable/Libraries Directory örneklerini standart Include/Executable/Libraries Directory örneklerinden sonra koymak zorunda kaldım: ie ** ExecutableDirectories: ** '$ (ExecutablePath); C: \ DXSDK \ bin' –

+0

Ayrıca benim için çalıştı. –

1

elle düzeltildi sözdizimi içinde winnt.h: "Windows.h" dahil her

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

typedef void * POINTER_64; typedef void * PVOID64; –

+0

Bir şeyi düzeltmeniz gerekiyorsa yayınınızı düzenleyebilirsiniz (yorumunuz aslında bir güncelleme olması gereken bir şeye benziyor.) – lxg

0

sen librdkafka kullanıyorsanız, bu hatayı alırsınız.

"librdkafka/include/basetsd.h" adını farklı bir adla yeniden isimlendirdim veya alt yoldan bu kitaplık üstbilgisine erişebilirsiniz!

Bu kitaplığın yazarı, bu dosyayı OS platform uyumluluğu ile başa çıkmak için yaptığını düşünüyorum. Ancak Windows Core gibi aynı dosya adı "basetsd.h" ile, sadece Visual Studio'yu karıştırıyor.