You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 10:22:18