VS2017中使用TextOutW()参数不匹配问题;“BOOL CDC::TextOutW(int,int,const CString &)”: 不能将参数 3 从“const char [18]”

最近老师给我布置做上位机的任务,虽然各种语言和编程环境看来看去,但因为个人基础不足,加上现有的能参考和借用的东西都是VC6.0+MFC环境的,所有我也只能入了这个大坑。在按照清华大学出版社出版的《MFC Windows应用程序设计》(任哲.2004)学习MFC基础知识时(度上很多例程都是出自本书),由于编者使用的是VC6.0环境,而我是VS2017+win10,在“鼠标和键盘”一章复现程序时发现点小问题。上网查找后发现这个问题在各版本VS中都会发生,但是少有的几个版本的解决方案中给出的说法总觉得差强人意,不能完全解决书上案例的修改问题。故在此给出我的修改方式。具体原因我虽然大致自己明白,但是说不清楚就不解释了。

错误说明:VC程序中使用了文字输出函数,TextOut(20,20,pDoc->m_pStr),前两项是显示文本的坐标,第三项是字符串指针,其中pDoc为有GetDocument获得的View视图的文档指针,m_pStr为在其他函数结构中赋值的字符串,声明为"char * m_pStr;"。在VS2017中使用此代码,会显示“E0304 没有与参数列表匹配的 重载函数 "CDC::TextOutW" 实例”以及“C2664 “BOOL CDC::TextOutW(int,int,const CString &)”: 无法将参数 3 从“char *”转换为“const CString &””。

网上给的关于宽字符之类的修改方式(修改配置或是加_T等)并不适用我这里用指针传递信息的情况。

解决方法:要做出修改的是TextOut的第三项,它对指针无法更改其为所需类型,应手动添加代码修改。就如错误提示来修改就好了。

代码如下:

//pDC->TextOut(20, 20, pDoc->m_pStr);//原本使用的报错的语句

//char *mpstr = pDoc->m_pStr;
CString str1(pDoc->m_pStr/*mpstr*/);//转换变量类型
pDC->TextOut(20, 20, str1);//依次为int、int、CString类型

猜你喜欢

转载自blog.csdn.net/starfire_hit/article/details/79144571
今日推荐