Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Не видит функции Crypto API


Автор: JenyaB 12.11.2009, 19:08
Здравствуйте!!!

Раньше никогда не сталкивалась с функциями Crypto API и вот пришлось. Возник вопрос на самом начальном этапе.

Вот есть код, по-идее, должен получит контекст криптопровайдера.


Код

#include <windows.h>
#include <wincrypt.h>
#include <stdio.h>
#pragma comment(lib, "advapi32.lib")

void main()
{
HCRYPTPROV hProv;
HCRYPTKEY hSessionKey;

// Получение контекста криптопровайдера
if (!CryptAcquireContextA(&hProv, NULL, NULL, 
    PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
{
  Error("CryptAcquireContext");
  return;
}

std::cout << "Cryptographic provider initialized" << std::endl;


}





Оно выдает ошибок 15 штук. все они касательно вещей, которые должны быть взяты из wincrypt.h:

error C2065: 'HCRYPTPROV' : undeclared identifier
error C2065: 'HCRYPTKEY' : undeclared identifier
error C2065: 'CryptAcquireContextA' : undeclared identifier
...

Подскажите, пожалуйста, чего оно не может подключит этот инклуд. Сам wincrypt.h есть, лежит в папке ИНКЛУД. 
Пользуюсь MS Visual Studio 6.0

Заранее благодарю!
 

Автор: jonie 12.11.2009, 21:22
Код

#define _WIN32_WINNT 0x0400
перед include-ами поставьте, всё будет.

Автор: JenyaB 12.11.2009, 21:36
jonie, спасибо, что откликнулись!

Теперь оно выдает две ошибки выдает в wincrypt.h :

c:\program files\microsoft visual studio\vc98\include\wincrypt.h(25) : error C2146: syntax error : missing ';' before identifier 'HRESULT'
c:\program files\microsoft visual studio\vc98\include\wincrypt.h(25) : fatal error C1004: unexpected end of file found 

Вот в этом коде выдает эти ошибки на строке typedef LONG HRESULT;

Код

#ifndef __WINCRYPT_H__
#define __WINCRYPT_H__


#if(_WIN32_WINNT >= 0x0400)

#ifdef __cplusplus
extern "C" {
#endif

#ifndef _HRESULT_DEFINED
#define _HRESULT_DEFINED

typedef LONG HRESULT;

#endif // !_HRESULT_DEFINED

#if !defined(_CRYPT32_)
#define WINCRYPT32API DECLSPEC_IMPORT
#else
#define WINCRYPT32API
#endif


Пробовала совсем закаментить #if(_WIN32_WINNT >= 0x0400), пробовала менять на 0500 или 0600 _WIN32_WINNT, но все равно эти два ошибки.
Вроде правильно все, хотя может чего не вижу уже...

Автор: jonie 13.11.2009, 10:47
JenyaB странно, но у меня ваша программа не выдает ошибок...
не надо менять системные файлы (sdk0-шные) ни в коем случае!

Автор: JenyaB 13.11.2009, 20:49
jonie, спасибо Вам огромное!

Ваш проект действительно работает нормально.
Я вот тут думаю - может я просто что-то с проектом напортачила, просто со студией мало работала. smile 
Скажите, Вы в какой версии студии создавали его и какой именно проект выбирали? 
Заранее благодарю.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)