将LPSTR转换为LPCWSTR

Converting LPSTR to LPCWSTR

本文关键字:LPCWSTR 转换 LPSTR      更新时间:2023-10-16

我有两个函数!第一个是

GetUserName(LPSTR buffer, LPDWORD size);

SetInfo(LPCWSTR user, int secret);

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

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

我的问题是;做这件事最安全、最好的方法是什么?

这里可以使用MultiByteToWideChar吗?谢谢

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

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

调用许多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);
}