开发者

Convert char[] 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);
开发者_Go百科

The error is, it cant convert the 2nd parameter to LPCWSTR.


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


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


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


Using MultiByteToWideChar() works for me:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜