У меня есть 2 идентичных проекта для VS2010 и VS2019. Они наследуют файлы ".props", которые, помимо прочего, определяют, что файлы WIN32;_WINDOWS;_WIN32_IE=0x0600;WINVER=0x0601;_WIN32_WINNT=0x0601;_WIN32_WINDOWS=0x0601;
CPP работают хорошо, и эти определения верны. Компилятор R C в VS2010 также работает правильно, но в VS2019 он показывает ошибку Error RC2104 undefined keyword or key name: IDTRYAGAIN
Причина этой ошибки в том, что IDTRYAGAIN скрыт:
//WinUser.h
#if(WINVER >= 0x0500)
#define IDTRYAGAIN 10
#define IDCONTINUE 11
#endif /* WINVER >= 0x0500 */
, потому что WINVER неожиданно равен 0x0400
Кажется, в моих проектах одинаковые настройки для R C, командная строка выглядит следующим образом:
/l 0x0409 /nologo /fo"my_path\%(Filename).res"
Все различия, которые я обнаружил, заключаются в том, что в VS2019 есть пункт «Наследовать от родительского элемента по умолчанию проекта» для «Undefine Preprocessor Definitions», который приводит к оценочному значению: %(UndefinePreprocessorDefinitions)
Но, как мы видим, это не влияет на командную строку ...
Если я неявно определяю требуется WINVER в R C, настройки определяют, что VS2019 начинает работать нормально.
Что здесь может быть не так? Есть ли какая-то разница в поведении, связанном с R C, между VS2010 и VS2019?
UPD.
Журналы от VS2010:
> Task "RC"
1> C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\rc.exe /l"0x0409" /nologo /fo" my_path\my_res_out.res" my_path\my_res.rc
1> Tracking command:
1> C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\Tracker.exe /d C:\Windows\Microsoft.NET\Framework\v4.0.30319\FileTracker.dll /i my_path /r my_path\my_res.RC /b MSBuildConsole_CancelEvent31c756f06d7d4121bb209443c669a690 /c "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\rc.exe" /l"0x0409" /nologo /fo"my_path\my_res_out.res" my_path\my_res.rc
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h(9835): warning RC4005: 'LB_ADDSTRING' : redefinition
1>
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winuser.h(9983): warning RC4005: 'CB_ADDSTRING' : redefinition
1>
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\string.h(54): warning RC4011: identifier truncated to '_CRT_SECURE_CPP_OVERLOAD_STANDA'
1>
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\string.h(76): warning RC4011: identifier truncated to '_CRT_SECURE_CPP_OVERLOAD_SECURE'
Журналы от VS2019:
> Task "RC"
1> Task Parameter:Source=my_path\my_res.rc
1> Task Parameter:Culture=0x0409
1> Task Parameter:ResourceOutputFileName=my_path\my_res_out.res
1> Task Parameter:SuppressStartupBanner=True
1> Task Parameter:UseResponseFile=False
1> Task Parameter:TrackerLogDirectory=my_path\.tlog\
1> Task Parameter:MinimalRebuildFromTracking=True
1> Task Parameter:ToolArchitecture=Native32Bit
1> Task Parameter:
1> ExcludedInputPaths=
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\include
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\atlmfc\include
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\include
1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\UnitTest\include
1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um
1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared
1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt
1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\cppwinrt
1> C:\Program Files (x86)\Windows Kits\NETFXSDK\4.7.2\Include\um
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\bin\HostX86\arm64\1033
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\bin\HostX86\x64\1033
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\bin\HostX86\x86\1033
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\bin\HostX64\arm64\1033
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\bin\HostX64\arm\1033
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\bin\HostX64\x64\1033
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\bin\HostX64\x86\1033
1> C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86
1> C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\tools
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\ide
1> C:\Program Files (x86)\HTML Help Workshop
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin
1> C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin
1> C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\
1> C:\WINDOWS
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\bin\HostX86\x64
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\bin\HostX86\x86
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\lib\x64
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.25.28610\atlmfc\lib\x64
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\lib\x64
1> C:\Program Files (x86)\Windows Kits\10\lib\10.0.18362.0\ucrt\x64
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\VS\UnitTest\lib
1> Task Parameter:TrackFileAccess=True
1> Write Tracking Logs: my_path\rc.write.1.tlog
1> Read Tracking Logs:
1> my_path\rc.read.1.tlog
1> C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86\rc.exe /l"0x0409" /nologo /fo"my_path\my_res_out.res" my_path\my_res.rc
1> Tracking command:
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\MSBuild\Current\Bin\Tracker.exe /d "C:\Program Files (x86)\MSBuild\15.0\FileTracker\FileTracker32.dll" /i my_path.tlog /r my_path\my_res.RC /b MSBuildConsole_CancelEventb9a11d84798d4cc392e905b288f0a5ec /c "C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86\rc.exe" /l"0x0409" /nologo /fo"my_path\my_res_out.res" my_path\my_res.rc
1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winuser.h(11682): warning RC4005: 'LB_ADDSTRING' : redefinition
1>
1> C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um\winuser.h(11830): warning RC4005: 'CB_ADDSTRING' : redefinition
1>
1> my_path\my_res.rc(90): error RC2104: undefined keyword or key name: IDTRYAGAIN
1>
1> The command exited with code 1.
(путь и имена опущены для упрощения чтения)