我在VS2010中编写了以下代码片段:
#pragma once
#include "stdafx.h"
#ifndef SECURITY_WIN32
#define SECURITY_WIN32
#endif
#include "windows.h"
#include "sspi.h"
int main( void )
{
ULONG cPackages = 0;
PSecPkgInfo pInfo = NULL;
SECURITY_STATUS stat = EnumerateSecurityPackages(&cPackages, &pInfo);
if (stat == SEC_E_OK)
{
for (ULONG i = 0; i < cPackages; i++)
{
wprintf(L"%s\t%s\n",pInfo[i].Name, pInfo[i].Comment);
}
FreeContextBuffer(pInfo);
}
return 0;
}
但是,在编译时我遇到了以下错误:
错误LNK2019:未解析的外部符号 函数_main
中引用了_ imp _EnumerateSecurityPackagesW @ 8
和
错误LNK2019:未解析的外部符号_FreeContextBuffer @ 4 在函数_main
中引用
任何人都可以帮助我吗?
答案 0 :(得分:5)
您需要关联Secur32.lib
。
转到Project Properties -> Linker -> Input
并在列表中添加Secur32.lib
。
答案 1 :(得分:2)
链接错误“未解析的外部符号”通常意味着没有添加必需的库(库)来解析符号。在VC ++的情况下,你得到没有装饰FreeContextBuffer
的符号(这将是错过的函数),转到http://msdn.microsoft.com并搜索此函数的相关文章。在这种情况下,它将产生"FreeContextBuffer"作为第一个结果。然后,您将查找最后一节“要求”,并找出链接器-Secur32.lib的编译器和库(您的情况)需要哪些头。然后,在IDE的 Properties - &gt;中添加此库。链接器 - &gt;输入。或者在代码中使用#pragma comment()
指令。
希望这会有所帮助。
答案 2 :(得分:0)
#include "stdafx.h"
用于包含'系统'接口,它可能已经包含在windows.h中。因此,在任何其他包含之前,尝试将你的#define移到stdafx.h中。