конвертировать символ в LPCWSTR - PullRequest
2 голосов
/ 04 октября 2010
char lpszUsername[255];
DWORD dUsername = sizeof(lpszUsername);
GetUserNameA(lpszUsername, &dUsername);
ret_status = NetUserGetInfo(pc_name, lpszUsername, 1, (LPBYTE*)&ui);

Так что мне нужен char для GetUserNameA, но для NetUserGetInfo - LPCWSTR. WTF? Как я могу конвертировать char в это?

error C2664: 'NetUserGetInfo' : cannot convert parameter 2 from 'char [255]' to 'LPCWSTR'

Ответы [ 4 ]

2 голосов
/ 04 октября 2010

LPCWSTR переводится на английский как: "строка широких символов" или wchar_t * в C.

Чтобы преобразовать строку ascii в строку широких символов, вам может понадобиться специальная функция преобразования.

mbstowcs () может быть тем, что вам нужно.

1 голос
/ 04 октября 2010

Попробуйте использовать 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);
0 голосов
/ 04 октября 2010

Я думаю, что ответ Ника Мейера решит вашу проблему.Но в целом я нашел следующее решение наиболее простым для преобразования LPCSTR в LPCWSTR.

Копирование LPCSTR в std::string.
Инициализация std::wstring с помощью std::string.
Получите LPCWSTR из c_str() из std::wstring.

0 голосов
/ 04 октября 2010

См. 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...