C Visual Studio 2017在编译时使用GetUserNameEx时出现大量错误
我正在尝试使用GetUserNameEx,但甚至无法编译它,因为我遇到了大量错误。这是我的代码:C Visual Studio 2017在编译时使用GetUserNameEx时出现大量错误,c,winapi,C,Winapi,我正在尝试使用GetUserNameEx,但甚至无法编译它,因为我遇到了大量错误。这是我的代码: #include <Windows.h> #include <Secext.h> #include <tchar.h> #include <wchar.h> #pragma comment(lib, "Secur32.lib") int wmain(int argc, WCHAR *argv[])
#include <Windows.h>
#include <Secext.h>
#include <tchar.h>
#include <wchar.h>
#pragma comment(lib, "Secur32.lib")
int wmain(int argc, WCHAR *argv[])
{
//GetUserNameEx()
EXTENDED_NAME_FORMAT nameFormat = NameDnsDomain;
WCHAR nameExtended[256 + 1];
DWORD sizeExtended = 256 + 1;
if (GetUserNameEx(nameExtended, &sizeExtended))
{
wprintf(L"%s\n", nameExtended);
}
else
{
wprintf(L"Error code: %lu\n", GetLastError());
}
return 0;
}
以下是我在尝试编译时遇到的错误:
你能帮我吗?似乎编译器无法识别该函数
编辑:我不能包括所有的错误,因为大约有48个错误与代码无关,除了错误的函数调用 两个问题:
似乎存在有关SEC_进入的定义问题。我相信它的定义是uu stdcall。我还在研究这个。它实际上是通过包含第一个安全模型并定义一个安全模型来解决的
无论如何,对GetUserNameEx的调用是不正确的
与此相反:
if (GetUserNameEx(nameExtended, &sizeExtended))
应该是这样的:
if (GetUserNameEx(nameFormat, nameExtended, &sizeExtended))
调整代码:
#define SECURITY_WIN32
#include <Windows.h>
#include <sspi.h>
#include <secext.h>
#include <stdio.h>
#pragma comment(lib, "Secur32.lib")
int wmain(int argc, WCHAR *argv[])
{
//GetUserNameEx()
EXTENDED_NAME_FORMAT nameFormat = NameDnsDomain;
WCHAR nameExtended[256 + 1] = {};
DWORD sizeExtended = ARRAYSIZE(nameExtended);
if (GetUserNameEx(nameFormat, nameExtended, &sizeExtended))
{
wprintf(L"%s\n", nameExtended);
}
else
{
wprintf(L"Error code: %lu\n", GetLastError());
}
return 0;
}
您包含了错误的标题。文档通常包含两条关于头的信息:声明符号的头文件,以及应该包含的头文件 本节: 标题:Secext.h包括Security.h 要解决此问题,请替换
#include <Secext.h>
编译此文件会产生以下错误:
由于系统标头中的格式错误,缺少尾随的SECURITY_MAC
要解决此问题,请先为用户模式应用程序1定义预处理器符号SECURITY_WIN32,然后在代码中或通过项目设置包括,例如:
#define SECURITY_WIN32
#include <Security.h>
1关于这些预处理器符号的信息很少。最有启发性的评论来自阅读//无法在内核模式下使用windows.h def'ns。在ifdef SECURITY_内核条件中。SECURITY_MAC很可能是从那个时候开始的,当时MFC仍然是一个跨平台框架,面向Windows和经典MAC操作系统。现在它没有实际用途。寻求调试帮助的问题此代码为什么不起作用?必须在问题本身中包含错误。不想写大约48个错误。正如您在答案中看到的,定义存在问题。不要显示IntelliSense错误。唯一有趣的错误是构建错误。以文本形式发布它们。未来寻求帮助的访问者无法找到此问答,因为无法轻松搜索图像。文本可以。否决此答案的人是否愿意解释他的不喜欢?可能是因为你建议包含错误的标题?我个人不喜欢主动忽略文档。定义安全性\u WIN32为我修复了用户模式应用程序的错误。非常感谢。
WCHAR nameExtended[256 + 1];
ULONG sizeExtended = 256 + 1;
if (GetUserNameExW(NameDnsDomain, nameExtended, &sizeExtended)) {
// ...
fatal error C1189: #error: You must define one of SECURITY_WIN32, SECURITY_KERNEL, or
#define SECURITY_WIN32
#include <Security.h>