将LPSTR转换为LPCWSTR

时间:2014-10-21 07:54:58

标签: c++ winapi

我有两个功能!第一个是

GetUserName(LPSTR buffer, LPDWORD size);

并且

SetInfo(LPCWSTR user, int secret);

我必须将GetUserName的输出buffer作为LPSTR

然后我必须在SetInfo函数中使用该字符串作为LPCWSTR

我的问题是;这样做最安全,最好的方法是什么?

可以在这里使用MultiByteToWideChar吗?谢谢!

2 个答案:

答案 0 :(得分:3)

如果GetUserName函数是Windows API函数,那么您可以显式调用宽版本:

wchar_t buffer[100];
GetUserNameW(buffer,100);

答案 1 :(得分:3)

调用许多Windows API的正确方法是首先调用提供空缓冲区并请求大小。然后分配缓冲区并进行调用。

以下是GetUserNameW的示例。

DWORD size = 0;
wstring name;

auto ret = GetUserNameW(nullptr, &size);
if(!ret && ERROR_INSUFFICIENT_BUFFER == ::GetLastError() && size > 0)
{
   wstring.resize(size);
   ret = GetUserNameW(&name[0], size);
}