【问题标题】:Converting LPSTR to LPCWSTR [duplicate]将 LPSTR 转换为 LPCWSTR [重复]
【发布时间】:2014-10-21 07:54:58
【问题描述】:

我有两个功能!第一个是

GetUserName(LPSTR buffer, LPDWORD size);

还有

SetInfo(LPCWSTR user, int secret);

我必须将GetUserName 的输出作为bufferLPSTR

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

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

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

【问题讨论】:

  • 但是那里的答案并没有证明MultiByteToWideChar的使用。
  • 是的,您可以使用MultiByteToWideChar。只需查看 MSDN 页面了解如何使用它。
  • @DebastianRedl 然后添加对该问题的答案 :)

标签: c++ winapi


【解决方案1】:

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

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

【讨论】:

  • 我很傻,没有睁开眼睛看到这个。这是你几个小时不睡觉的结果。谢谢大佬!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2017-11-10
    • 2011-11-13
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多