【发布时间】:2016-11-14 00:08:07
【问题描述】:
我正在尝试在 Visual Studio 2015 社区控制台项目中使用函数 ConvertSidToStringSid()。
根据msdn页面
https://msdn.microsoft.com/en-us/library/windows/desktop/aa376399(v=vs.85).aspx
要求是:
Minimum supported client: Windows XP [desktop apps only]
Minimum supported server: Windows Server 2003 [desktop apps only]
Header: sddl.h
Library: Advapi32.lib
DLL: Advapi32.dll
我使用的是 64 位 Windows 10 家庭版计算机。我分别有 *.lib 和 *.dll 文件:
C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10240.0\um\x64\AdvAPI32.Lib
C:\Windows\System32\advapi32.dll
当我在 stdafx.h 中填写“#inclucde”时,我没有收到 Intellisense 的错误。相比之下,“#include
在包含“stdafx.h”的 .cpp 源文件中,我添加了代码
BOOL OK ... ;
PSID owner;
char *sOwner;
OK = ConvertSidToStringSidW(owner, sOwner);
但后来我在 ConvertSidToStringSidW 下得到了红色的摆动。
在解决方案资源管理器中,在项目下,在外部依赖项下有文件 SCardErr.h 和 sdkddkver.h,但在这两者之间没有,没有 sddl.h。 (顺便说一下,sddkver.h 定义了 _WIN32_WINNT_THRESHOLD 0x0A00。在编辑器中用 IntelliSense 测试,_WIN32_WINNT 也是 0x0A00。)
在编译时,我首先得到一个错误信息,即找不到文件 sddl.h。我电脑上有多个副本,并添加到所有配置的“附加包含目录”中,目录
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\shared
编译仍然失败,出现“标识符 xxx 未定义”和“xxx”:未找到标识符,分别来自 IntelliSense 和 Build。
头文件 sddl.h 仍然不在外部依赖项中。右键单击 sdksddkver.h 我得到它的完整路径:新添加的附加包含目录。在我添加这个包含目录之前我不知道它是什么。
右击stdafx.h中的include指令,可以打开sddl.h。当内容由参数为假的#if/#ifdef 指令保护时,编辑器以浅灰色显示部分内容。但是,我要使用的函数 ConvertSidToStringSid 以全彩显示。
不确定是否提示错误消息显示“已定义”而不是“已声明”。在项目属性、链接器、输入、附加依赖项中,列出了文件 advapi32.lib。
我做错了什么?
【问题讨论】:
标签: visual-studio visual-c++ header-files visual-studio-2015