Конвертировать char [] в LPCWSTR - PullRequest
9 голосов
/ 12 июля 2010

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

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

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

Ответы [ 5 ]

9 голосов
/ 12 июля 2010

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

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

1 голос
/ 12 июля 2010

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

Или измените проектнастройки для использования многобайтовых строк - по умолчанию они обычно являются строками "Unicode" или "Wide Character" (я не могу вспомнить точное имя опции в верхней части моей головы).

0 голосов
/ 23 октября 2013

Использование 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);
 ...
}
0 голосов
/ 13 июля 2010

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

CString szBuff;

szBuff.Format(_T("%p"), m_hWnd);
MessageBox(NULL, szBuff, L"Test print handler", MB_OK);
0 голосов
/ 12 июля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...