Can anyone help me to correct this code:
char szBuff[64];
sprintf(szBuff, "%p", m_hWnd);
MessageBox(NULL, szBuff, L"Test print handler", MB_OK);
The error is, it cant convert the 2nd parameter to LPCWSTR.
Can anyone help me to correct this code:
char szBuff[64];
sprintf(szBuff, "%p", m_hWnd);
MessageBox(NULL, szBuff, L"Test print handler", MB_OK);
The error is, it cant convert the 2nd parameter to LPCWSTR.
You might want to look at mbstowcs, which will convert a conventional "one byte per character" string to a "multiple byte per character" string.
Alternatively, change your project settings to use Multibyte Strings - by default they are usually "Unicode" or "Wide Character" strings (I can't remember the exact option name off the top of my head).
For this specific case, the fix is quite simple:
wchar_t szBuff[64];
swprintf(szBuff, L"%p", m_hWnd);
MessageBox(NULL, szBuff, L"Test print handler", MB_OK);
That is, use Unicode strings throughout. In general, when programming on Windows, using wchar_t
and UTF-16 is probably the simplest. It depends on how much interaction with other systems you have to do, of course.
For the general case, if you've got an ASCII (or char *
) string, use either WideCharToMultiByte for the general case, or mbstowcs
as @Matthew points out for simpler cases (mbstowcs
works if the string is in the current C locale).
If you are compiling with UNICODE
, make all the strings you work with double width - i.e. define them as wchar_t*
.
If you really must convert ASCII to Unicode, use ATL conversion macros.
Since your tag suggests VC++, I am suggesting CString. If yes, then the following snippet will also work for your case:
CString szBuff;
szBuff.Format(_T("%p"), m_hWnd);
MessageBox(NULL, szBuff, L"Test print handler", MB_OK);