MyOldAccount Ответов: 2

Используйте winhttp в visual studio 6.0


Я поддерживаю устаревшее приложение, написанное на Visual Studio C++ 6.0.

Мне нужно заменить часть кода с вызовами сервера WinHTTP API-интерфейс.

Я создал небольшую демонстрацию в тестовом проекте Visual Studio 6.0, чтобы посмотреть, как пойдут дела.

Когда я строю код, я получаю следующую ошибку ( тот же код работает безупречно в Visual Studio 2013 ) :

fatal error C1083: Cannot open include file: 'winhttp.h': No such file or directory

Я добавил путь включения, как в этот[^] изображение.

Я добавил путь к библиотеке, как в этот[^] изображение.

После попытки компиляции я получаю это:
error C2146: syntax error : missing ';' before identifier 'dwResult'
error C2501: 'DWORD_PTR' : missing storage-class or type specifiers
error C2501: 'dwResult' : missing storage-class or type specifiers
error C2065: '__in' : undeclared identifier
error C2143: syntax error : missing ')' before 'const'
warning C4229: anachronism used : modifiers on data are ignored
error C2491: 'WinHttpTimeFromSystemTime' : definition of dllimport data not allowed
error C2059: syntax error : ')'
error C2065: '__in_z' : undeclared identifier
error C2146: syntax error : missing ')' before identifier 'LPCWSTR'
warning C4229: anachronism used : modifiers on data are ignored
error C2491: 'WinHttpTimeToSystemTime' : definition of dllimport data not allowed
error C2059: syntax error : ')'
error C2065: '__in_ecount' : undeclared identifier
error C2065: 'dwUrlLength' : undeclared identifier
error C2146: syntax error : missing ')' before identifier 'LPCWSTR'
warning C4229: anachronism used : modifiers on data are ignored
error C2491: 'WinHttpCrackUrl' : definition of dllimport data not allowed
error C2059: syntax error : ')'
error C2146: syntax error : missing ')' before identifier 'LPURL_COMPONENTS'
warning C4229: anachronism used : modifiers on data are ignored
error C2491: 'WinHttpCreateUrl' : definition of dllimport data not allowed
error C2059: syntax error : ')'
error C2065: '__in_z_opt' : undeclared identifier
error C2146: syntax error : missing ')' before identifier 'LPCWSTR'
warning C4229: anachronism used : modifiers on data are ignored
error C2491: 'WinHttpOpen' : definition of dllimport data not allowed
error C2440: 'initializing' : cannot convert from 'int' to 'void *'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
error C2059: syntax error : ')'
error C2061: syntax error : identifier '__out_bcount_part'
error C2061: syntax error : identifier '__in_bcount_opt'
error C2061: syntax error : identifier '__out_data_source'
error C2059: syntax error : 'return'
warning C4518: '__declspec(dllimport ) ' : storage-class or type specifier(s) unexpected here; ignored
error C2146: syntax error : missing ';' before identifier 'BOOL'
fatal error C1004: unexpected end of file found

После перемещения вновь добавленных путей наверх я получил только одну ошибку:

c:\program files (x86)\microsoft sdks\windows\v7.1a\include\specstrings.h(11) : fatal error C1083: Cannot open include file: 'sal.h': No such file or directory

У меня есть копия/вставка sal.h и ConcurrencySal.h в VC98 / Include и скопируйте / вставьте каталог CodeAnalysis также.

Теперь я получаю следующие ошибки:
c:\program files (x86)\microsoft visual studio\vc98\include\sal.h(708) : warning C4068: unknown pragma
c:\program files (x86)\microsoft visual studio\vc98\include\sal.h(1472) : warning C4068: unknown pragma
c:\program files (x86)\microsoft visual studio\vc98\include\sal.h(2866) : warning C4005: '__useHeader' : macro redefinition
        c:\program files (x86)\microsoft sdks\windows\v7.1a\include\sal_supp.h(57) : see previous definition of '__useHeader'
c:\program files (x86)\microsoft visual studio\vc98\include\sal.h(2876) : warning C4005: '__on_failure' : macro redefinition
        c:\program files (x86)\microsoft sdks\windows\v7.1a\include\specstrings_supp.h(77) : see previous definition of '__on_failure'
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\winnt.h(3994) : warning C4035: 'ReadPMC' : no return value
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\winnt.h(4023) : warning C4035: 'ReadTimeStampCounter' : no return value
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\winnt.h(12804) : error C2144: syntax error : missing ';' before type 'int'
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\winnt.h(12804) : error C2501: '__inner_checkReturn' : missing storage-class or type specifiers
c:\program files (x86)\microsoft sdks\windows\v7.1a\include\winnt.h(12804) : fatal error C1004: unexpected end of file found

ВОПРОС:

Не могли бы вы объяснить мне, как настроить проект на Visual C++ 6, чтобы он мог использовать WinHTTP API (конечно, если это вообще возможно) ?

Что я уже пробовал:

В данный момент я гуглю в поисках решения этой проблемы...

2 Ответов

Рейтинг:
2

KarstenK

Потому что WinHTTP очень высокий уровень API, который вы ДОЛЖЕН включите стандартный заголовок windows сначала Это решит большинство проблем в вашем коде.
правильный путь - с брекетами:

#include <windows.h> 
#include <winhttp.h> 

Установите путь поиска sdk в последней позиции, чтобы избежать столкновений. И вы должны включить файл winhttp.lib на вкладках компоновщика.

Взгляните также на примеры winhttp от Microsoft.

Вам лучше использовать какую-нибудь новую версию Visual Studio, я предпочитаю VS 2005 или VS 2010.


MyOldAccount

Поскольку winhttp - это высокоуровневый API, вы должны сначала включить стандартный заголовок windows .

Я сделал это с самого начала, это не причина проблемы. :(

Установите путь поиска sdk в последней позиции, чтобы избежать столкновений.

Сделал это, но все равно получил проблемы...

И вы должны включить файл winhttp.lib на вкладках компоновщика.

Сделал это тоже (с комментарием #pragma) все тот же результат

Вам лучше использовать какую-нибудь новую версию Visual Studio

На данный момент я могу использовать только VS 6.

Спасибо, что попытались помочь, я обновил ОП новой информацией...

Рейтинг:
16

Jochen Arndt

Вы пытаетесь использовать Windows SDK версии 7.1 A с Visual Studio 6. Это не сработает.

Последним SDK, поддерживающим Visual Studio 6, является Microsoft Platform SDK February 2003 (версия 5.2.3790.0) (источник: Microsoft Windows SDK-Википедия[^Обратите внимание, что вы должны установить полный SDK, чтобы включить заголовок WinHttp и файл библиотеки.

Итак, у вас есть три варианта:


  1. Перенесите приложение для сборки с более новой версией Visual Studio
  2. Используйте WININET API вместо WinHTTP API
  3. Установите полный PSDK февраля 2003 года или старше для использования с Visual Studio 6


MyOldAccount

Спасибо, 5эд.

Для будущих читателей: мы решили медленно перейти на более новую версию Visual Studio. Мы не хотели форсировать события, охотясь за PSDK с февраля 2003 года.

Jochen Arndt

Спасибо за ваши отзывы.

Это хорошее решение-избавиться от 19-летнего пакета разработки. Надеюсь, перенос проекта не будет слишком сложным.