2010-07-12 58 views
9

谁能帮我纠正这个代码:转换的char []到LPCWSTR

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

的错误是,它不能第二个参数转换为LPCWSTR。

回答

9

对于这个具体情况下,解决方法是相当简单:

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语言环境)。

+0

+1'mbstowcs'! – alimg 2014-07-05 13:11:09

1

你可能想看看mbstowcs,它会将传统的“每个字符一个字节”字符串转换为“每字符多个字节”字符串。

或者,将您的项目设置更改为使用多字节字符串 - 默认情况下,它们通常是“Unicode”或“宽字符”字符串(我不记得头顶的确切选项名称)。

0

如果使用UNICODE进行编译,请使用双倍宽度处理所有字符串 - 即将它们定义为wchar_t*

如果您确实必须将ASCII转换为Unicode,请使用ATL conversion macros

0

既然你的标签建议VC++,我建议CString。如果是的话,那么下面的片段也将为您的工作情况:

CString szBuff; 

szBuff.Format(_T("%p"), m_hWnd); 
MessageBox(NULL, szBuff, L"Test print handler", MB_OK); 
0

使用的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); 
... 
}