开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1994|回复: 1
收起左侧

[源码分享] 解决C++使用CString格式化后返回char*带中文数据不完整问题

[复制链接]

结帖率:76% (32/42)
发表于 2018-5-20 10:40:37 | 显示全部楼层 |阅读模式   山东省烟台市
C++代码:
  1. char * ReturnText()
  2. {
  3.         CString info;
  4.         info.Format(_T("{"uid": %u, "nick": "%s"}"), 10001, CStringW("王经理"));

  5.         /*
  6.                 参考文章
  7.                 https://blog.csdn.net/u010306834/article/details/39495305
  8.                 https://www.cnblogs.com/junyuz/archive/2011/08/24/2151857.html
  9.         */
  10.         //注意:以下n和len的值大小不同,n是按字符计算的,len是按字节计算的
  11.         int n = info.GetLength();     // n = 14, len = 18
  12.         //获取宽字节字符的大小,大小是按字节计算的
  13.         int len = WideCharToMultiByte(CP_ACP, 0, info, info.GetLength(), NULL, 0, NULL, NULL);
  14.         //为多字节字符数组申请空间,数组大小为按字节计算的宽字节字节大小
  15.         char * pChar = new char[len + 1];   //以字节为单位
  16.         //宽字节编码转换成多字节编码
  17.         WideCharToMultiByte(CP_ACP, 0, info, info.GetLength() + 1, pChar, len + 1, NULL, NULL);
  18.         pChar[len] = '\0';   //多字节字符以'\0'结束

  19.         return pChar;
  20. }

复制代码
易语言代码:
  1. .版本 2

  2. .DLL命令 ReturnText, 文本型, "MFCLibrary1.dll", "ReturnText", 公开
复制代码
  1. .版本 2
  2. .支持库 spec

  3. .子程序 _按钮1_被单击

  4. 调试输出 (ReturnText ())
复制代码


网上的指针到文本不适用于这种情况,大部分情况下char*窄字符直接返回,易语言就能接。
发表于 2019-7-26 21:09:14 | 显示全部楼层   北京市北京市
这里内存泄漏了啊,如果只是W to A 直接用CString 就可以  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表