我有两个功能!第一个是
GetUserName(LPSTR buffer, LPDWORD size);
并且
SetInfo(LPCWSTR user, int secret);
我必须将GetUserName
的输出buffer
作为LPSTR
然后我必须在SetInfo
函数中使用该字符串作为LPCWSTR
我的问题是;这样做最安全,最好的方法是什么?
可以在这里使用MultiByteToWideChar
吗?谢谢!
答案 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);
}