Может любой помогать мне исправить этот код:
char szBuff[64];
sprintf(szBuff, "%p", m_hWnd);
MessageBox(NULL, szBuff, L"Test print handler", MB_OK);
Ошибка, это, наклон преобразовывает 2-й параметр в LPCWSTRASSE
Для этого конкретного случая исправить довольно просто:
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).
Если вы компилируете с UNICODE
, сделайте все строки, с которыми вы работаете, двойной шириной - т.е. определите их как wchar_t *
.
Если вам действительно необходимо преобразовать ASCII в Unicode, используйте макросы преобразования ATL .
Возможно, вы захотите посмотреть на mbstowcs, который преобразует обычную строку "один байт на символ" в строку "несколько байт на символ".
Или же измените настройки проекта, чтобы использовать многобайтовые строки - по умолчанию они обычно "Unicode" или "Wide Character" (точное название опции я не помню).
Поскольку ваш тег предлагает VC ++, я предлагаю CString. Если да, то следующий фрагмент также подойдет для вашего случая:
CString szBuff;
szBuff.Format(_T("%p"), m_hWnd);
MessageBox(NULL, szBuff, L"Test print handler", MB_OK);