ошибки winnt.h в командной строке VS - PullRequest
0 голосов
/ 22 августа 2011

Я пытаюсь разработать плагин NPAPI, используя NIXYSA (http://code.google.com/p/nixysa/), который использует Scons для построения проекта. Сейчас я просто пытаюсь создать пример приложения Hello World. Проблема в том, что после генерации источника Cфайлы, он сталкивается со странными ошибками winnt.h при компиляции. Ниже приведена команда, которую он использует, и результат:

c:\Users\Mo\Documents\Projects\Chrome Plugin\nixysa-read-only\examples\hel
lo_world>"c:\Program Files (x86)\Microsoft Visual Studio 9.0\vc\bin\cl" /Foglue\
globals_glue.obj /c glue\globals_glue.cc /TP /nologo /DWIN32 /DOS_WINDOWS /I. /I
 "C:\Users\Mo\Documents\Projects\Chrome Plugin\nixysa-read-only\nixysa\sta
tic_glue\npapi" /I "C:\Users\Mo\Documents\Projects\Chrome Plugin\nixysa-re
ad-only\third_party\npapi\include" /Iglue
globals_glue.cc
C:\Program Files\Microsoft SDKs\Windows\v7.0\include\winnt.h(6361) : error C2146
: syntax error : missing ';' before identifier 'ContextRecord'
C:\Program Files\Microsoft SDKs\Windows\v7.0\include\winnt.h(6361) : error C4430
: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft SDKs\Windows\v7.0\include\winnt.h(6361) : error C4430
: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft SDKs\Windows\v7.0\include\winnt.h(12983) : error C206
5: 'PCONTEXT' : undeclared identifier
C:\Program Files\Microsoft SDKs\Windows\v7.0\include\winnt.h(12984) : error C214
6: syntax error : missing ')' before identifier 'ContextRecord'
C:\Program Files\Microsoft SDKs\Windows\v7.0\include\winnt.h(12984) : warning C4
229: anachronism used : modifiers on data are ignored
C:\Program Files\Microsoft SDKs\Windows\v7.0\include\winnt.h(12984) : error C218
2: 'RtlCaptureContext' : illegal use of type 'void'
C:\Program Files\Microsoft SDKs\Windows\v7.0\include\winnt.h(12984) : error C249
1: 'RtlCaptureContext' : definition of dllimport data not allowed
C:\Program Files\Microsoft SDKs\Windows\v7.0\include\winnt.h(12984) : error C205
9: syntax error : ')'
C:\Program Files\Microsoft SDKs\Windows\v7.0\include\winnt.h(13372) : error C214
3: syntax error : missing ';' before '__stdcall'
C:\Program Files\Microsoft SDKs\Windows\v7.0\include\winnt.h(13372) : error C443
0: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft SDKs\Windows\v7.0\include\winnt.h(13376) : error C443
0: missing type specifier - int assumed. Note: C++ does not support default-int
C:\Program Files\Microsoft SDKs\Windows\v7.0\include\winnt.h(14982) : error C386
1: '__readfsdword': identifier not found
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\INCLUDE\xlocale(342) : war
ning C4530: C++ exception handler used, but unwind semantics are not enabled. Sp
ecify /EHsc

Я много искал, и единственное решение, которое предлагается, - это когда DXSDKЗаголовки вызывают конфликт, и они должны быть упомянуты позже в списке включаемых каталогов. У меня действительно установлен DXSDK, но включенные каталоги отсутствуют ни в списке для моей VS9, ни в «vcvars32.txt» командной строки VS 2008.

Четыре строки, определяющие переменные командной строки VS:

@set PATH=%DevEnvDir%;%VCINSTALLDIR%\BIN;%VSINSTALLDIR%\Common7\Tools;%VSINSTALLDIR%\Common7\Tools\bin;%FrameworkDir%\%Framework35Version%;%FrameworkDir%\%Framework35Version%\Microsoft .NET Framework 3.5 (Pre-Release Version);%FrameworkDir%\%FrameworkVersion%;%VCINSTALLDIR%\VCPackages;%PATH%
@set INCLUDE=%INCLUDE%;%VCINSTALLDIR%\INCLUDE;%VCINSTALLDIR%\ATLMFC\INCLUDE
@set LIB=%VCINSTALLDIR%\ATLMFC\LIB;%VCINSTALLDIR%\LIB;%LIB%
@set LIBPATH=%FrameworkDir%\%Framework35Version%;%FrameworkDir%\%FrameworkVersion%;%VCINSTALLDIR%\ATLMFC\LIB;%VCINSTALLDIR%\LIB;%LIBPATH%

В командной строке VS я получаю следующее для echo% INCLUDE%:

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ATLMFC\INCLUDE;C:\Program
Files (x86)\Microsoft Visual Studio 9.0\VC\INCLUDE;C:\Program Files\Microsoft SD
Ks\Windows\v7.0\include;

Я выполнил команду cl.exe как в командной строке (используя скрипт nixysa), так и в командной строке VS, оба выдавали одинаковые ошибки. Я не думаю, что есть какие-либо проблемыв сгенерированном C-коде, поскольку это неотредактированный Hello World, который в основном тестируется, и у других, похоже, нет проблем с ним.

Так есть идеи?Может быть проблема в том, что он использует winnt.h или?

Дополнительная информация: Win 7 x64 на Intel Core 2 Duo

1 Ответ

3 голосов
/ 08 октября 2011
...