_USING_V110_SDK71_ не унаследован от значений по умолчанию в VC++ 2015, v140_xp, Release?

Сводка: Необъявленный идентификатор SetDefaultDllDirectories из atlcore.h сообщается при компиляции версии Release, но это нормально при компиляции Debug. Дальнейшее расследование показывает, что роль играет _USING_V110_SDK71_. Он должен быть унаследован от дефолтов проекта (см. рисунок ниже), но не для комбинации: Release MinDependency и v140_xp.

Подробности. Я переношу родное приложение C++ ATL с Visual C++ 2005 на Visual C++ 2015. Цель состоит в том, чтобы как можно дольше поддерживать работающую версию Windows XP. Поэтому для проекта был установлен набор инструментов платформы v140_xp. Он отлично работает для отладочной версии. Однако это вызывает ошибку компиляции для версии Release MinDepency. При использовании v140 (без _xp) компилируется нормально.

Это ветвь приложения, которую необходимо перенести. Я уже успешно мигрировал другие ветки (более ранние) на VC++ 2008, 2010, 2012 и 2013. (Или я что-то забыл сделать, или сейчас другая ситуация.)

Я видел эту ошибку, также упомянутую в другом месте; однако причины могут быть разными. Полная строка ошибки:

1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\atlcore.h(644):
error C2065: 'SetDefaultDllDirectories':undeclared identifier

Проблемные линии используются для случая, когда

#ifndef _USING_V110_SDK71_

Итак, видимо, этот символ не был определен. Я использую Visual Studio 2015 Professional версии 14.0.23107.0 D14REL и Windows 8.1.

При проверке настроек проекта должен быть определен символ _USING_V110_SDK71_, унаследованный от значений проекта по умолчанию.

_USING_V110_SDK71_ должен быть определен!?

Обновление: сообщение об ошибке и строки вокруг него в окне вывода:

1>------ Build started: Project: Market, Configuration: Release MinDependency Win32 ------
1>  SplashScreen.cpp
1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\sal_supp.h(57): warning C4005: '__useHeader': macro redefinition
1>  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\sal.h(2886): note: see previous definition of '__useHeader'
1>c:\program files (x86)\microsoft sdks\windows\v7.1a\include\specstrings_supp.h(77): warning C4005: '__on_failure': macro redefinition
1>  C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\sal.h(2896): note: see previous definition of '__on_failure'
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\atlcore.h(644): error C2039: 'SetDefaultDllDirectories': is not a member of '`global namespace''
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\atlcore.h(644): error C2065: 'SetDefaultDllDirectories': undeclared identifier
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\atlmfc\include\atlcore.h(646): error C2065: 'LOAD_LIBRARY_SEARCH_SYSTEM32': undeclared identifier
1>c:\program files (x86)\microsoft visual studio 14.0\vc\wtl90\include\atlgdi.h(470): warning C4838: conversion from 'int' to 'UINT' requires a narrowing conversion
1>c:\program files (x86)\microsoft visual studio 14.0\vc\wtl90\include\atlgdi.h(477): warning C4838: conversion from 'int' to 'UINT' requires a narrowing conversion
1>c:\program files (x86)\microsoft visual studio 14.0\vc\wtl90\include\atlgdi.h(484): warning C4838: conversion from 'int' to 'UINT' requires a narrowing conversion
1>c:\program files (x86)\microsoft visual studio 14.0\vc\wtl90\include\atlgdi.h(491): warning C4838: conversion from 'int' to 'UINT' requires a narrowing conversion
1>c:\program files (x86)\microsoft visual studio 14.0\vc\wtl90\include\atlgdi.h(3683): warning C4838: conversion from 'LONG' to 'DWORD' requires a narrowing conversion
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Не могли бы вы пролить свет на это? Спасибо


person pepr    schedule 25.08.2015    source источник
comment
Трудно угадать, все выглядит нормально. В вашем окне вывода нет, похоже, оно жалуется и на что-то еще. Избегайте ошибок выбора вишни.   -  person Hans Passant    schedule 25.08.2015
comment
Спасибо, Ханс -- обновление теперь содержит сообщения. Может ли это быть вызвано комбинацией с v7.1a Windows SDK? Но почему он работает с Debug и не работает с Release?   -  person pepr    schedule 25.08.2015
comment
Эти предупреждения также вызваны отсутствующим макросом. Вам придется копнуть глубже и проверить, что на самом деле передается компилятору. Или просто поставьте задачу и определите макрос самостоятельно. Или просто полностью избавьтесь от конфигурации, MinDependency была удалена несколько версий назад.   -  person Hans Passant    schedule 25.08.2015
comment
Я попытался определить макрос самостоятельно в свойствах проекта (это не зависит от Inherit.... Но он ведет себя так же. Я вижу в vcxproj, что это смесь старых вещей с новыми вещами. Как могу ли я надежно выбросить старые вещи и создать новые?Должен ли я стереть файл решения и файл проекта и создать его с нуля ... из существующих источников?   -  person pepr    schedule 25.08.2015
comment
@HansPassant: Спасибо за подсказку воссоздать проект с нуля. Пожалуйста, скопируйте этот комментарий как ответ. Я хотел бы принять это и закрыть вопрос.   -  person pepr    schedule 26.08.2015


Ответы (1)


Если вы преобразовали файлы проекта из предыдущей версии Visual Studio, возможно, некоторые параметры сборки (включая определения макросов препроцессора) были переданы в параметры конфигурации каждого отдельного файла. Чтобы проверить это, щелкните правой кнопкой мыши исходный файл и нажмите «Свойства», затем перейдите на вкладку «Препроцессор». Если вы видите текст, выделенный жирным шрифтом в поле «Определения препроцессора», вы будете знать, что это был ваш виновник. Чтобы исправить это, вам нужно, чтобы каждый файл наследовал настройки проекта, что может быть утомительно; Я считаю, что проще всего загрузить vcxproj в текстовом редакторе и удалить оскорбительные определения.

person Bekenn    schedule 03.11.2015
comment
Спасибо, Бекенн. В проекте около 300 файлов .cpp, поэтому я не могу этого сделать. Я уже создал проект с нуля, как предложил HansPassant. - person pepr; 03.11.2015