mfc中的CString如何转为C++中的string?

lswandym_888 2016-06-12 02:57:46
用惯了mfc中的CString,碰到C++中的string还有些不顺手,下面的代码请路过的朋友支一下招,我弄成C++中的string总是有问题。
static DWORD CALLBACK EditStreamInCallBack(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CString *pstr = (CString *)dwCookie;
if (pstr->GetLength() < cb)
{
*pcb = pstr->GetLength();
memcpy(pbBuff, (LPCSTR)*pstr, *pcb);
pstr->Empty();
}
else
{
*pcb = cb;
memcpy(pbBuff, (LPCSTR)*pstr, *pcb);
*pstr = pstr->Right(pstr->GetLength() - cb);//主要是这里我不知道用wstring时如何写。
}
return 0;
}

这个在MFC下是ANSI字符环境,我要在Unicode字符集环境下使用C++中的wstring,摆脱MFC下的CString。
...全文
116 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-06-13
  • 打赏
  • 举报
回复
#ifdef _UNICODE
 wstring ws(cstr);
#else
 string s(cstr);
#endif
zgl7903 2016-06-12
  • 打赏
  • 举报
回复
lswandym_888 2016-06-12
  • 打赏
  • 举报
回复
如果有错请各位指正,谢谢。
lswandym_888 2016-06-12
  • 打赏
  • 举报
回复
刚捣腾出来了,贴下备忘,同时真诚感谢各位的热心帮助! string *pstr = (string *)dwCookie; if ((LONG)(pstr->length()) < cb) { *pcb = pstr->length(); memcpy(pbBuff, pstr->c_str(), *pcb); pstr->clear(); *pstr = ""; } else { *pcb = cb; memcpy(pbBuff, pstr->c_str(), *pcb); *pstr = pstr->substr(pstr->length()-cb); } return 0; 是窄字节的。
lswandym_888 2016-06-12
  • 打赏
  • 举报
回复
多谢各位的耐心解答,我传入的是宽字节。
lx624909677 2016-06-12
  • 打赏
  • 举报
回复
http://www.cppblog.com/yuanyajie/archive/2006/12/14/16427.html
叶恭介叶恭介 2016-06-12
  • 打赏
  • 举报
回复
A2W W2A 多字节和宽字节字符串的转换宏,你值得拥有
  • 打赏
  • 举报
回复
*pstr = pstr->Right(pstr->GetLength() - cb); Right - substr GetLength - length 关键是你要明确,传入的数据是宽字节的还是多字节的,要不要转换

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧