char lpszUsername[255];
DWORD dUsername = sizeof(lpszUsername);
GetUserNameA(lpszUsername, &dUsername);
ret_status = NetUserGetInfo(pc_name, lpszUsername, 1, (LPBYTE*)&ui);
所以我需要GetUserNameA的char,但是对于NetUserGetInfo - LPCWSTR。 WTF? 如何将char转换为此?
error C2664: 'NetUserGetInfo' : cannot convert parameter 2 from 'char [255]' to 'LPCWSTR'
答案 0 :(得分:2)
LPCWSTR将英语翻译为:“宽字符串”或C中的wchar_t *。
要将ascii字符串转换为宽字符字符串,您可能需要一个特殊的转换函数。
mbstowcs()可能就是您所需要的。
答案 1 :(得分:1)
考虑使用GetUserNameW
代替GetUserNameA
。这将为您提供宽字符字符串中的当前用户名,无需从ANSI转换为Unicode。
WCHAR lpwszUsername[255];
DWORD dUsername = sizeof(lpwszUsername) / sizeof(WCHAR);
GetUserNameW(lpwszUsername, &dUsername);
ret_status = NetUserGetInfo(pc_name, lpwszUsername, 1, (LPBYTE*)&ui);
答案 2 :(得分:0)
有关相关转换宏,请参阅MSDN:
#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);
答案 3 :(得分:-1)
我认为Nick Meyer的答案解决了你的问题。但总的来说,我发现以下解决方案最容易将LPCSTR
转换为LPCWSTR
。
将LPCSTR
复制到std::string
使用std::wstring
初始化std::string
从LPCWSTR
的{{1}}获取c_str()
。