将char转换为LPCWSTR

时间:2010-10-04 02:12:42

标签: c winapi

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'

4 个答案:

答案 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::stringLPCWSTR的{​​{1}}获取c_str()