本人用的VS2017,昨天晚上学习进程间通信时,按照@yangchuankai博主所写码,但问题出现在strcpy(pBuf,str),提示:
不存在CString转换成const char*的函数
于是在网上找了一番,有些不行,最好的方法是在项目属性—C/C++—预处理器—预处理器定义,那一栏最后添加_CRT_SECURE_NO_WARNINGS
要用分号隔开!分号隔开!分号隔开!
然后再在strcpy(pBuf,str)函数前加上这一句代码
CStringA strA(str.GetBuffer(0));
str.ReleaseBuffer();
string s = strA.GetBuffer(0);
const char* str1 = s.c_str();
当然,后面就要改成strcpe(pBuf,str1);
然后是char*转CString:
虽然是char*转CString,系统有时会提示char*转LPCTSTR,一样的道理。下面是代码:
从其他博主查到有两种方法:
①
char* a1 = "xxxx";
CString b = a1;
(LPCTSTR)a2 = (LPCTSTR)b;
SetDlgItemText(IDC_RICHEDIT2_RECIEVE, a2);
可是编译还是报错,提示CString b = a1出错,
error C2440: “初始化”:
无法从“char *”转换为“ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>”
于是试了第二种方法:
②
char* a1 = "xxxx";
CString b(a1);
(LPCTSTR)a2 = (LPCTSTR)b;
SetDlgItemText(IDC_RICHEDIT2_RECIEVE, a2);
OK,编译通过!
小白暂时不懂这两种区别,还请指教。