Не удается выполнить сборку с включением Winhttp в Windows XP (v141_xp)

Я использую Virsual Studio 2017 и работаю над системой Win7, у меня есть следующий код, использующий Winhttp:

#include "stdafx.h"
#include <Windows.h>
#include <winhttp.h>
#pragma comment (lib, "Winhttp.lib")

int main(int argc, char *args[])

{
    return 0;
}

Я могу построить его успешно, когда «Параметры» -> «Свойства конфигурации» -> «Общие» -> «Набор инструментов платформы» равен Visual Studio 2017 (v141), но я не могу выполнить сборку с Visual Studio 2017 - Windows XP (v141_xp)

следующая ошибка сборки:

Error   C2760   syntax error: unexpected token 'identifier', expected 'type specifier'

введите здесь описание изображения

Если я удалю <Windows.h> и <winhttp.h>, он скомпилируется успешно.


person TangMonk    schedule 27.02.2018    source источник
comment
Ну, и вы ожидаете, что люди смогут заглянуть внутрь этих заголовочных файлов? Просто скопируйте и вставьте их содержимое, а затем продолжайте удалять его, пока не получите минимальный пример. Кстати: XP не поддерживается и не получает никаких обновлений, так зачем вам собирать для него?   -  person Ulrich Eckhardt    schedule 27.02.2018
comment
@UlrichEckhardt: Это, вероятно, было бы бесполезно. Я предполагаю, что ошибка вызвана использованием современного SDK без поддержки XP.   -  person MSalters    schedule 27.02.2018
comment
Несмотря на то, что Visual Studio 2017 — Windows XP (v141_xp) можно выбрать в настройках проекта, кажется, что поддержка Windows XP для C++ — это отдельный элемент в установщике, не выбранный по умолчанию.   -  person Bo Persson    schedule 27.02.2018
comment
@BoPersson спасибо, поддержка C++ в Windows XP действительно установлена   -  person TangMonk    schedule 27.02.2018
comment
Что может быть бесполезным, @MSalters? Предоставление минимального примера?   -  person Ulrich Eckhardt    schedule 27.02.2018
comment
@UlrichEckhardt: Проблема здесь в том, что Win10 SDK, вероятно, пропускает некоторые определения обратной совместимости для XP. Вы предлагаете скопировать проблемные биты, но вы не можете скопировать отсутствующие строки из Win10 SDK.   -  person MSalters    schedule 27.02.2018
comment
Нет, я просто предлагаю сначала удалить stdafx.h, а затем погрузиться в другие заголовки. Таким образом, мы получим код, вызывающий ошибку, что является первым шагом к ее исправлению. Во всяком случае, здесь даже нет вопроса (кроме подразумеваемого, как я могу избавиться от своих проблем ??), поэтому я голосую за закрытие этого вопроса.   -  person Ulrich Eckhardt    schedule 27.02.2018


Ответы (2)


В этом случае вы можете попробовать добавить этот оператор, чтобы использовать предварительное объявление в вашем коде.

#define CINTERFACE 
person msc    schedule 27.06.2018

Это может помочь кому-то еще, кто наткнется на этот вопрос и имеет ту же проблему, что и я. Я также пытался настроить v141_xp, потому что мне нужно было запустить код C++14 на Windows Server 2008 R2. У меня так и не получилось, установка SDK 7 для VS 2017 кажется неполной. Однако установка распространяемого пакета VC 2017 на Windows Server 2008 R2 заставила мою сборку работать, когда я установил для набора инструментов платформы значение v141 вместо v141_xp. Этого достаточно для моего варианта использования.

https://visualstudio.microsoft.com/downloads/ Другие инструменты и платформы->Microsoft Visual C++ Распространяемый для Visual Studio 2017

person Eric McWhorter    schedule 07.03.2019