C++ MFC头中的语法错误

C++ MFC头中的语法错误,c++,visual-c++,mfc,C++,Visual C++,Mfc,我正在尝试编译pgpfone,我的构建系统有问题,我从VS6迁移到VS2008,然后再迁移到VS2015 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\CL.exe /c /I.\ /I..\common /I..\bignum /I..\..\..\libs\pfl\win32 /I..\..\..\libs\pfl\common /I..\..\..\libs\pfl\common\util /ZI /nologo /W

我正在尝试编译pgpfone,我的构建系统有问题,我从VS6迁移到VS2008,然后再迁移到VS2015

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\CL.exe /c /I.\ /I..\common /I..\bignum /I..\..\..\libs\pfl\win32 /I..\..\..\libs\pfl\common /I..\..\..\libs\pfl\common\util /ZI /nologo /W2 /WX- /Od /Oy- /D WIN32 /D _DEBUG /D _WINDOWS /D PGP_WIN32=1 /D PGPXFER=1 /D PGP_INTEL=1 /D BNINCLUDE=bni80386c.h /D _VC80_UPGRADE=0x0600 /Gm /EHsc /MTd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo".\Debug/" /Fd".\Debug/vc140.pdb" /Gd /TP /analyze- /errorReport:queue ..\common\ADPCM.cpp ..\common\blowfish.cpp ..\common\bytefifo.cpp ..\common\cast5.cpp ..\common\CControlThread.cpp ..\common\CCounterEncryptor.cpp ..\common\CEncryptionStream.cpp ..\common\CMessageQueue.cpp ..\common\CPFPackets.cpp ..\common\CPFTransport.cpp ..\common\CPipe.cpp ..\common\CPriorityQueue.cpp ..\common\crc.cpp ..\common\CSoundInput.cpp ..\common\CSoundOutput.cpp ..\common\CXferThread.cpp ..\common\des3.cpp ..\common\dh.cpp ..\common\DHPrimes.cpp ..\common\fastpool.cpp ..\common\HashWordList.cpp ..\common\PGPFoneUtils.cpp ..\common\samplerate.cpp ..\common\SHA.cpp CAuthWindow.cpp CEncryptionDialog.cpp CFileTransferDialog.cpp CLevelMeter.cpp CModemDialog.cpp CPFTInternet.cpp CPFTSerial.cpp CPFWindow.cpp CPGPFone.cpp CPGPFoneFrame.cpp CPGPFStatusBar.cpp CPhoneDialog.cpp CSoundLight.cpp CStatusPane.cpp CTriThreshold.cpp CWinFilePipe.cpp CXferWindow.cpp LMutexSemaphore.cpp LSemaphore.cpp LThread.cpp PGPFWinUtils.cpp
  PGPFWinUtils.cpp
  _WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
atlmfc\include\afxrendertarget.h(142): warning C4003: not enough actual parameters for macro 'IsNull' [C:\projects\pgpfone\src\win32\PGPfone.vcxproj]
atlmfc\include\afxrendertarget.h(142): error C2059: syntax error: '(' [C:\projects\pgpfone\src\win32\PGPfone.vcxproj]
atlmfc\include\afxrendertarget.h(142): error C2143: syntax error: missing ')' before '==' [C:\projects\pgpfone\src\win32\PGPfone.vcxproj]
atlmfc\include\afxrendertarget.h(142): error C2143: syntax error: missing ',' before '==' [C:\projects\pgpfone\src\win32\PGPfone.vcxproj]
atlmfc\include\afxrendertarget.h(142): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int [C:\projects\pgpfone\src\win32\PGPfone.vcxproj]
atlmfc\include\afxrendertarget.h(142): error C2059: syntax error: '==' [C:\projects\pgpfone\src\win32\PGPfone.vcxproj]
atlmfc\include\afxrendertarget.h(142): error C2059: syntax error: ')' [C:\projects\pgpfone\src\win32\PGPfone.vcxproj]
atlmfc\include\afxrendertarget.h(142): error C2059: syntax error: '{' [C:\projects\pgpfone\src\win32\PGPfone.vcxproj]
atlmfc\include\afxrendertarget.h(142): error C2334: unexpected token(s) preceding '{'; skipping apparent function body [C:\projects\pgpfone\src\win32\PGPfone.vcxproj]
以下是完整日志:

如何找出导致错误的原因?我假设PGPFWinUtils.cpp的代码包含一个错误地调用宏的头,导致了错误,但我不知道该错误在哪里

有可能用VisualC++获得宏回溯吗?我记得Clang或GCC有这个特性

以下是完整的资料来源:

我是在AppVeyor上编译的,本地没有afxrendertarget.h的源代码。如何在Ubuntu上下载Windows SDK进行标题检查

atlmfc\include\afxrendertarget.h(142): warning C4003: not enough actual parameters for macro 'IsNull' [C:\projects\pgpfone\src\win32\PGPfone.vcxproj]
第一个错误提供了两条线索:

afxrendertarget.h中的第142行是CD2DSizeF的成员函数BOOL IsNull const的内联定义

C4003表示宏IsNull的非法扩展

这表示其他一些非MFC头文件定义了一个宏IsNull,当该头包含在包含afxrendertarget.h的MFC头文件之前时,IsNull宏将中断IsNull成员函数声明

第一个错误提供了两条线索:

afxrendertarget.h中的第142行是CD2DSizeF的成员函数BOOL IsNull const的内联定义

C4003表示宏IsNull的非法扩展


这表示其他一些非MFC头文件定义了一个宏IsNull,当该头文件包含在包含afxrendertarget.h的MFC头文件之前时,IsNull宏将破坏IsNull成员函数声明。

什么是“宏回溯”?预处理器输出?您还知道可以使用远程桌面登录AppVeyor实例,对吗?请检查包含的非MFC标头。其中一个可能定义了一个名为IsNull的宏,它打破了MFC对CD2DSizeF::IsNull的声明。@stijn:通过宏回溯,我指的是一个显示从何处调用宏的列表,如。我现在将检查RDP和非MFC标题。@dxiv:你是对的,发布一个答案。什么是“宏回溯”?预处理器输出?您还知道可以使用远程桌面登录AppVeyor实例,对吗?请检查包含的非MFC标头。其中一个可能定义了一个名为IsNull的宏,它打破了MFC对CD2DSizeF::IsNull的声明。@stijn:通过宏回溯,我指的是一个显示从何处调用宏的列表,如。我现在将检查RDP和非MFC标题。@dxiv:你是对的,发布一个答案。