Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符转换为LPCWSTR_C_Winapi - Fatal编程技术网

将字符转换为LPCWSTR

将字符转换为LPCWSTR,c,winapi,C,Winapi,所以我需要GetUserNameA的char,但是NetUserGetInfo-LPCWSTR需要char。 世界跆拳道联盟? 如何将char转换成这个 char lpszUsername[255]; DWORD dUsername = sizeof(lpszUsername); GetUserNameA(lpszUsername, &dUsername); ret_status = NetUserGetInfo(pc_name, lpszUsername, 1, (LPBYTE*)&a

所以我需要GetUserNameA的char,但是NetUserGetInfo-LPCWSTR需要char。 世界跆拳道联盟? 如何将char转换成这个

char lpszUsername[255];
DWORD dUsername = sizeof(lpszUsername);
GetUserNameA(lpszUsername, &dUsername);
ret_status = NetUserGetInfo(pc_name, lpszUsername, 1, (LPBYTE*)&ui);
有关相关转换宏,请参见:

error C2664: 'NetUserGetInfo' : cannot convert parameter 2 from 'char [255]' to 'LPCWSTR'
#包括
使用_转换;
字符lpszUsername[255];
DWORD dUsername=sizeof(lpszUsername);
GetUserNameA(lpszUsername和dUsername);
//A2W()应该可以
ret_status=NetUserGetInfo(pc_名称,A2W(lpszUsername),1,(LPBYTE*)和ui);

LPCWSTR在英语中翻译为:“宽字符串”,或C语言中的wchar\u t*

要将ascii字符串转换为宽字符串,可能需要一个特殊的转换函数


mbstowcs()可能就是您所需要的。

考虑使用
GetUserNameW
而不是
GetUserNameA
。这将以宽字符串形式提供当前用户名,从而无需从ANSI转换为Unicode

#include <AtlBase.h>

USES_CONVERSION;

char lpszUsername[255];
DWORD dUsername = sizeof(lpszUsername);
GetUserNameA(lpszUsername, &dUsername);

// A2W() should do it
ret_status = NetUserGetInfo(pc_name, A2W(lpszUsername), 1, (LPBYTE*)&ui);

我认为尼克·迈耶的回答解决了你的问题。但总的来说,我发现下面的解决方案最容易将
LPCSTR
转换为
LPCWSTR

LPCSTR
复制到
std::string

std::string
初始化
std::wstring


std::wstring
c_str()
获取
LPCWSTR

更好的方法是,使用
GetUserNameW
避免依赖宏。@dan,但如果Loderunner尝试为ANSI编译,则会出现相反的情况(需要将宽字符串转换为ANSI字符串)。依赖宏有什么不对?它是Windows API的一个有很好文档记录的部分,极不可能更改。@dan,啊,别担心。我错过了NetUserGetInfo只有宽字符版本的部分。编辑…从技术上讲,它不是“指向宽字符串的长指针”?“指向以零结尾的宽字符序列的远只读指针”。指针本身可以重新分配,但它只能用于读取宽字符,不能更改宽字符。在Win32的平面内存模型中,近指针和远指针之间没有区别。
WCHAR lpwszUsername[255];
DWORD dUsername = sizeof(lpwszUsername) / sizeof(WCHAR);
GetUserNameW(lpwszUsername, &dUsername);
ret_status = NetUserGetInfo(pc_name, lpwszUsername, 1, (LPBYTE*)&ui);