【问题标题】:Convert char[] to LPCWSTR将 char[] 转换为 LPCWSTR
【发布时间】:2010-07-12 03:29:17
【问题描述】:

谁能帮我更正这段代码:

    char szBuff[64];
    sprintf(szBuff, "%p", m_hWnd);
    MessageBox(NULL, szBuff, L"Test print handler", MB_OK);

错误是,它无法将第二个参数转换为 LPCWSTR。

【问题讨论】:

    标签: visual-c++


    【解决方案1】:

    对于这个特定的案例,修复非常简单:

    wchar_t szBuff[64];
    swprintf(szBuff, L"%p", m_hWnd);
    MessageBox(NULL, szBuff, L"Test print handler", MB_OK);
    

    也就是说,始终使用 Unicode 字符串。一般来说,在 Windows 上编程时,使用wchar_t 和 UTF-16 可能是最简单的。当然,这取决于您必须与其他系统进行多少交互。

    对于一般情况,如果您有一个 ASCII(或 char *)字符串,请使用 WideCharToMultiByte 作为一般情况,或者 mbstowcs @Matthew 指出对于更简单的情况(mbstowcs 有效如果字符串在当前 C 语言环境中)。

    【讨论】:

      【解决方案2】:

      您可能想查看mbstowcs,它将传统的“每个字符一个字节”字符串转换为“每个字符多个字节”字符串。

      或者,将您的项目设置更改为使用多字节字符串 - 默认情况下,它们通常是“Unicode”或“宽字符”字符串(我不记得确切的选项名称了)。

      【讨论】:

        【解决方案3】:

        如果您使用UNICODE 进行编译,请将您使用的所有字符串设置为双倍宽度 - 即将它们定义为wchar_t*

        如果您确实必须将 ASCII 转换为 Unicode,请使用 ATL conversion macros

        【讨论】:

          【解决方案4】:

          由于您的标签建议使用 VC++,因此我建议使用 CString。如果是,那么以下 sn-p 也适用于您的情况:

          CString szBuff;
          
          szBuff.Format(_T("%p"), m_hWnd);
          MessageBox(NULL, szBuff, L"Test print handler", MB_OK);
          

          【讨论】:

            【解决方案5】:

            使用 MultiByteToWideChar() 对我有用:

            void main(int argc, char* argv[])
            {
             ...
             wchar_t filename[4096] = {0};
             MultiByteToWideChar(0, 0, argv[1], strlen(argv[1]), filename, strlen(argv[1]));
            
             // RenderFile() requires LPCWSTR (or wchar_t*, respectively)
             hr = pGraph->RenderFile(filename, NULL);
             ...
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-07-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-07-06
              • 2017-03-31
              • 2017-10-14
              相关资源
              最近更新 更多