• "LPWSTR" 类型的实参与"const.char *"类型形参不兼容


    1. CString csPlus;
    2.  CString csSummand;
    3.  m_PlusNumber.GetWindowTextW(csPlus);
    4.  m_Summand.GetWindowTextW(csSummand);
    5.     
    6.  int nPlus = atoi(csPlus.GetBuffer(0)); //将编辑框文本转换成整数
    7. // int nPlus = atoi(strcpy(csPlus.GetBuffer(10),"aa"));
    8.  csPlus.ReleaseBuffer();
    9.  int nSummand = atoi(csSummand.GetBuffer(0));
    10.  csSummand.ReleaseBuffer();
    11.  int nRet = nPlus + nSummand;
    12.  char chRet[128] = {0}; //将结果装换成字符串
    13.  itoa(nRet,chRet,10);
    14.  m_Result.SetWindowTextW(chRet);

      在 5  8   13 行处会报错

    原因分析:

    这些代码在VC6 下面是可以的  在VC2010下不能通过

    VC6默认使用字符ANSII编码方式

    VC2010默认使用UNICODE编码方式

    为了满足程序代码国际化的需要,业界推出了Unicode标准,它提供了一种简单和一致的表达字符串的方法,所有字符中的字节都是16位的值,其数 量也可以满足差不多世界上所有书面语言字符的编码需求,开发程序时使用Unicode(类型为wchar_t)是一种被鼓励的做法。

    LPWSTR与LPCWSTR由此产生,它们的含义类似于LPSTR与LPCSTR,只是字符数据是16位的wchar_t而不是char。

    CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。

    在ANSII和UNICODE两种情况下,TCHAR的字符位数不一样,所以会有这样的报错。

    最简单的解决方法是工程右键属性 修改编码方式从unicode改为多字节字符集。

    在VC2010中 将CString转换成char  应该使用 _wtoi

    5 ,8修改为:

    1. int nPlus = _wtoi(csPlus.GetBuffer(0));
    2.  int nSummand = _wtoi(csSummand.GetBuffer(0));

    对13行的修改 修改为:

    可添加声明

    1. CString csRet;

    字符串指针(char *)等已经被CString构造函数支持的数据类型可以直接赋值

    将chRet赋给csRet

    1. csRet = chRet;

    最后一行修改为

    1. m_Result.SetWindowTextW(csRet);

    对13行的修改更简化应该为寻找一种将int型转换成CString的方法。

    在VC6中可以直接 

    1. csRet.Format("%d",nRet);

    但是在2010中不适用。

    在VC2010中应该这样写

    1. csRet.Format(_T("%d"),nRet);

    OK  修改完成 可以运行

  • 相关阅读:
    SkylineGlobe for web开发是否支持IE11?
    OGC标准服务 WMS WCS WFS WPS
    SkylineGlobe TerraExplorer Pro 遇到模型显示有锯齿怎么办?
    SkylineGlobe TerraExplorer Pro 7.0 Web 控件版 第一行示例代码
    Cesium3DTileset示例
    Win7 64位系统,IE11,如何让IE的Tab强制运行64位内核?
    SkylineGlobe系列软件对机器配置要求
    VS 2015 搭建Google Test
    7种排序算法的c++实现
    哈希表应用实例
  • 原文地址:https://www.cnblogs.com/duyy/p/3600454.html
Copyright © 2020-2023  润新知