【问题标题】:visual studio 2015 c++ sddl.h does not appear as external dependencyvisual studio 2015 c++ sddl.h 不显示为外部依赖项
【发布时间】: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 ”在“include”下方给出了一个红色的摆动下划线,并且鼠标悬停显示“错误:无法打开源文件“blah.h”。

在包含“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


    【解决方案1】:

    我自己找到了解决方案。问题是我在同一个“解决方案”中有两个项目,每个项目都有自己的 stdafx.h 文件。我在编辑器中打开了错误的 stdafx.h 文件,并将 #include 指令放在了错误的文件中。

    -谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多