VS2015(VC++ MFC)中无法将char转换为LPWSTR的问题求助
解决VS2015 MFC中
cannot convert from 'char [20]' to 'LPWSTR'错误 错误原因
VS2015默认启用Unicode字符集,此时LPWSTR等价于wchar_t*(宽字符指针),而你代码中使用的char是单字节字符类型,两者类型不兼容,导致转换失败。
解决方案
方案1:修改代码适配Unicode字符集(推荐)
将代码中的单字节字符相关操作替换为宽字符版本,或使用MFC的通用字符类型TCHAR保证兼容性:
void CDeptStore2Dlg::OnBnClickedNewitem() { // TODO: Add your control notification handler code here CNewStoreItemDlg dlg; srand( (unsigned)time(NULL) ); wchar_t strNumber[20]; // 替换为宽字符数组 int number1 = rand() % 999; int number2 = rand() % 999; // 使用swprintf(宽字符版sprintf),格式字符串加L前缀表示宽字符 swprintf(strNumber, _countof(strNumber), L"%d-%d", number1, number2); dlg.m_ItemNumber = strNumber; if( dlg.DoModal() ) { LVITEM lvItem; lvItem.mask = LVIF_TEXT; lvItem.iItem = 0; lvItem.iSubItem = 0; lvItem.pszText = strNumber; // 此时strNumber是wchar_t*,匹配LPWSTR this->m_StoreItems.InsertItem(&lvItem); } }
如果想兼容多字节和Unicode两种字符集,也可以用MFC的TCHAR和_stprintf:
TCHAR strNumber[20]; _stprintf(strNumber, _T("%d-%d"), number1, number2);
方案2:切换项目为多字节字符集
如果不想修改代码,可以直接调整项目字符集设置:
- 右键项目 -> 属性 -> 配置属性 -> 常规
- 在“字符集”下拉菜单中选择“使用多字节字符集”
- 点击确定后重新编译
注意事项
- 现代Windows应用推荐使用Unicode字符集,能更好地支持多语言环境,因此优先选择方案1。
- 若使用
TCHAR系列类型,需确保代码中所有字符串操作都使用对应的宏(如_T("")、_stprintf等)。
内容的提问来源于stack exchange,提问作者Hector Moradi
相关产品推荐
相关产品推荐

