我的项目出现了一些致命错误,错误来自 sspi.h,我必须定义一些东西,但我不是什么以及为什么,请有人解释一下。
sspi.h(60): fatal error C1189: #error : You must define one of SECURITY_WIN32, SECURITY_KERNEL, or SECURITY_MAC
我的项目出现了一些致命错误,错误来自 sspi.h,我必须定义一些东西,但我不是什么以及为什么,请有人解释一下。
sspi.h(60): fatal error C1189: #error : You must define one of SECURITY_WIN32, SECURITY_KERNEL, or SECURITY_MAC
虽然诊断很清楚必须定义、 或之一SECURITY_WIN32
,但它对确定使用哪个以及为什么使用没有多大帮助。据我所知,这些都没有正式记录在 MSDN 中,因此唯一的信息来源是实际的头文件。SECURITY_KERNEL
SECURITY_MAC
SECURITY_MAC
: 这个符号只出现在<sspi.h>中,该文件的版权声明为1992-1999
. 据推测,这个符号是为了支持“经典”Mac OS 的编译而引入的,早在 MFC 仍计划成为面向 Windows 和 Mac 的跨平台框架时。这个符号今天似乎没有任何实际用途。
SECURITY_KERNEL
:这里最有启发性的评论来自<NTSecPKG.h>,阅读// Can't use the windows.h def'ns in kernel mode.
。这似乎表明在SECURITY_KERNEL
从以内核模式运行的模块访问安全包时需要定义该符号。
SECURITY_WIN32
: 在整个 Windows SDK 中根本没有关于这个符号的注释。从用户模式应用程序访问安全 API 时应该使用这个符号似乎是合理的。
假设以上所有内容都是正确的,可以使用以下准则来确定要定义的符号:
SECURITY_WIN32
在编译用户模式应用程序时定义。SECURITY_KERNEL
在编译内核模式模块时定义。SECURITY_MAC
预处理器符号。Just add
#define SECURITY_WIN32
before all includes
只是为了添加到现有答案,定义它的更好方法是
#ifndef SECURITY_WIN32
#define SECURITY_WIN32
#endif
您可以在#include 有问题的头文件之前添加它,或者在第一次调用 windows.h 或 afxwin.h 或其他任何东西之前将它添加到您的 stdafx.h(如果您正在使用)全局添加它指出您定义了 WINVER 和 _WIN32_WINNT,或者您当然可以将其添加到您的项目设置中。