VS2019: макрос WINVER не подходит для компилятора ресурсов - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть 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.

(путь и имена опущены для упрощения чтения)

1 Ответ

0 голосов
/ 15 апреля 2020

Компилятор ресурсов не наследует определения макросов от компилятора: он использует свой собственный набор. Я полагаю, что в VS2010 это хорошо сработало: случай включения заголовка в WinAPI привел к тому, что по умолчанию WINVER соответствовал значению моего проекта. Теперь порядок меняется и значение по умолчанию другое
Чтобы решить мою проблему, я использовал явное определение в файле props, например:

<ResourceCompile>
<PreprocessorDefinitions Condition="'$(Platform)'=='x64'">WIN32;_WINDOWS;_WIN32_IE=0x0600;WINVER=0x0601;_WIN32_WINNT=0x0601;_WIN32_WINDOWS=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...