Преобразуйте символ [] к LPCWSTRASSE

Может любой помогать мне исправить этот код:

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

Ошибка, это, наклон преобразовывает 2-й параметр в LPCWSTRASSE

9
задан barlyee 12 July 2010 в 03:29
поделиться

4 ответа

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

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

9
ответ дан 4 December 2019 в 21:07
поделиться

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

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

0
ответ дан 4 December 2019 в 21:07
поделиться

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

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

1
ответ дан 4 December 2019 в 21:07
поделиться

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

CString szBuff;

szBuff.Format(_T("%p"), m_hWnd);
MessageBox(NULL, szBuff, L"Test print handler", MB_OK);
0
ответ дан 4 December 2019 в 21:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: