如果在头文件中 先包含了windows.h 然后再引入wincrypt.h,并且 #define _WIN32_WINNT 0x0400,即如下顺序
#include <windows.h>
#define _WIN32_WINNT 0x0400
#include <wincrypt.h>
那么在编译时 CryptoAPI 的相关的参数和函数就会提示未定义,造成这个问题的原因是
在 windows.h 头文件中已经引入过一次 wincrypt.h这个头文了 如下
但此时_WIN32_WINNT 并未被定义,所以 wincrypt.h 的文件里面 只引入了一个防止头文件重定义的标志
#ifndef __WINCRYPT_H__
#define __WINCRYPT_H__
那么接下来再
#define _WIN32_WINNT 0x0400
#include <wincrypt.h> //引入这个文件的时候发现__WINCRYPT_H__已经定义过了
就没有效果了,所以在编译的时候,也还会提示函数未定义的错误 所以应以如下顺序引入wincrypt.h
#define _WIN32_WINNT 0x0400
#include <windows.h>
#include <wincrypt.h>
或者
#define _WIN32_WINNT 0x0400
#include <windows.h>