将字符转换为LPCWSTR
所以我需要GetUserNameA的char,但是NetUserGetInfo-LPCWSTR需要char。 世界跆拳道联盟? 如何将char转换成这个将字符转换为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
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);