Преобразовать char в LPCWSTR

Может кто-нибудь помочь мне исправить этот код:

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

Ошибка в том, что он не может преобразовать второй параметр в LPCWSTR.

    Для этого конкретного случая исправление довольно просто:

     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) ,

    Возможно, вы захотите посмотреть на mbstowcs , который преобразует обычную строку «один байт на символ» в строку с «несколькими байтами на символ».

    В качестве альтернативы, измените настройки проекта, чтобы использовать Multibyte Strings – по умолчанию они обычно являются строками «Unicode» или «Wide Character» (я не могу вспомнить точное имя опции с верхней части головы).

    Если вы компилируете с UNICODE , сделайте все строки, которые вы работаете, с двойной шириной, то есть определите их как wchar_t* .

    Если вы действительно должны преобразовать ASCII в Unicode, используйте macros преобразования ATL .

    Поскольку ваш тег предлагает VC ++, я предлагаю CString. Если да, то для вашего дела будет работать следующий fragment:

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

    Использование 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); ... } 
    Давайте будем гением компьютера.