• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > BSTR与CString转化,丢失数据,只有第一个字符被传递

BSTR与CString转化,丢失数据,只有第一个字符被传递

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了bstr转cstring,bstr t cstring,bstr cstring,bstr t转cstring,bstr数据类型等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: BSTR与CString转化,丢失数据,只有第一个字符被传递
描述:

CString text= "12343";
BSTR bstrText =text.AllocSysString();
text.Format("%s",(char *)bstrText);
::AfxMessageBox(text);
为什么 text变成 "1"了??只取到第一个字符 
因为上面的 出问题了~~转化时只转了第一个字符~~~~


解决方案1:

(char*)(_bstr_t)bstrText

解决方案2:

USES_CONVERSION;

解决方案3:


USES_CONVERSION;
text=OLE2T(bstrText);

解决方案4:

text.Format("%s",(char *)bstrText);?

解决方案5:

上面我不是说过了吗?宽字符要么用支持宽字符的函数,要么进行转换,ATL下有一堆宏用于这种转换,比如楼上说的W2A,这个ATL或COM书上肯定都会介绍的。

解决方案6:

转化过程是对的,不过输出是错的,bstrText中已经是BSTR了。

解决方案7:

CString text= "12343";
BSTR bstrText =text.AllocSysString();
text = W2A(bstrText);

解决方案8:

(char *)bstrText
这种用法就是不对的,这正是C语言的传统弊病——任意的强制转换!
你上面的强制转换只是通过了编辑,运行的时候肯定得不到你想要的结果。宽字符就应该用宽字符函数来操作,比如你的bstrText,用wsprintf来打印才对。
像AfxMessageBox这些函数,看起来只有一个版,去可以操作两种字符,其实不然,这是因为MFC在后台使用的宏操作,其实根本就没有AfxMessageBox这个函数,只有AfxMessageBoxA和AfxMessageBoxW,是宏的运用让AfxMessageBox在编译的时候动态的变成了AfxMessageBoxA或AfxMessageBoxW

解决方案9:

::MessageBoxW( 0 , text, 0 , 0);用这个输出

解决方案10:

CString text= L"12343";
默认情况下text是ascii的,而BSTR是宽字符的,即1和2之间有0x0,而0是字符串的结束符。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • BSTR----字符串,紧急求救!!!!再现等待,马上给分!!!!
  • 有关bstr的问题
  • 关于BSTR和CString问题
  • 关于Bstr和ComBstr的相关内容
  • CStringA转BSTR的问题
  • 两个BSTR是用什么函数比较是否一致的?
  • _bstr_t怎么专成CString?这个CString是MFC的还是ATL的CString?
  • vc里面的long或者int如何转换成BSTR
  • BSTR型的变量是不是只能通过Sysallocstring函数得到?
  • 如何将_bstr_t的内容拷贝到LPOLESTR指针上?

相关文章

  • 2017-06-05 打包程序怎样解决DLL的依赖关系?
  • 2017-06-04 DShow打开另一个文件的问题
  • 2017-06-04 Asp中如何响应ActiveX控件的事件
  • 2017-06-05 VC读取EXcel的自定义格式
  • 2017-06-04 如何将几个rgb或者yuv拼接成一个
  • 2017-06-04 VC60中,程序出现"0x5f55a57b"指令引用的"0x00000000"内存。该内存不能为"read"希望大侠们帮我看下。
  • 2017-06-04 ocx控件加载异常,如何抛出?
  • 2017-06-05 VC水晶报表求助
  • 2017-06-04 在VC60中写的COM组件电子签名是成功的,怎么用VCNET编译签名后在浏览器里不能正常注册?
  • 2017-06-04 帮看下,我的OCX控件打包时应该包含哪些dll,谢谢

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • com注册后,是不是用户模式和服务模式的程序都能通过com接口通信?
    • 一个百思不解的问题,关于window程序内存占用
    • 怎样得到当前日期加上100天的日期??
    • VC60调试控件怎么改调试工具
    • 求助一个关于用import指令访问DCOM接口的问题
    • 网上找到一个PERL做的组件,说是可以进行中文词的自动切分,但我不知道在VC中怎样才能调用?
    • import智能指针如何获得组件的实现类
    • 请教请教请教请教yonsmYonsm哪里能下载直接使用TWAIN数据源管理程序的例子?
    • 用LoadLibrary和GetProcAddress函数调用dll的代码有问题,希望高手指点(谢谢)!
    • 关于ActiveX控件注册的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有