1. // BSTR_Convert.cpp : 定义控制台应用程序的入口点。
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <comutil.h> // _com_util::ConvertBSTRToString
  6. #include <atlbase.h> //CComBSTR
  7. #include <atlstr.h>
  8.  
  9. #pragma comment(lib, "comsuppw.lib")
  10.  
  11. using namespace _com_util;
  12.  
  13. int _tmain(int argc, _TCHAR* argv[])
  14. {
  15. /****** BSTR->char* *****/
  16. //方法一使用 ConvertBSTRToString
  17. //BSTR bstrText = ::SysAllocString(L"Test");
  18. //char* lpszText = _com_util::ConvertBSTRToString(bstrText);
  19. //SysFreeString(bstrText);//用完释放
  20. //delete[] lpszText;
  21. //方法二 使用_bstr_t的赋值运算符重载
  22. //_bstr_t b = bstrText;
  23. //char* lpstrText1 = b;
  24.  
  25. /****** char*->BSTR *****/
  26. //方式一 使用SysAllocString等API函数
  27. //BSTR bstrText = ::SysAllocString(L"Test");
  28. //BSTR bstrText1 = ::SysAllocStringLen(L"Test1",3);
  29. //BSTR bstrText2 = ::SysAllocStringByteLen("Test2",4);//乱码
  30.  
  31. //方式二 使用COleVariant或_variant 编译出错 属于MFC?无法再WIN32下使用?
  32. //COleVariant strVar("this is a test");
  33. //_variant_t strVar1("this is a test");
  34. //BSTR bstrText = strVar.bstrVal;
  35. //BSTR bstrText1 = strVar1.bstrVal;
  36.  
  37. //方式三 方法三,使用_bstr_t,这是一种最简单的方法。
  38. //BSTR bstrText = _bstr_t("This is a test");
  39.  
  40. //方法四,使用CComBSTR。例如:
  41. //BSTR bstrText = CComBSTR("This is a test");
  42. //CComBSTR bstr1("This is a test");
  43. //BSTR bstrText1 = bstr1.m_str;
  44.  
  45. //方法五,使用ConvertStringToBSTR。
  46. //char* lpszText = "Test";
  47. //BSTR bstrText2 = _com_util::ConvertStringToBSTR(lpszText);
  48.  
  49. /******* CString->BSTR *******/
  50. //通 常是通过使用CStringT::AllocSysString来实现
  51. CString cstr("this is a test");
  52. BSTR bstrText = cstr.AllocSysString();
  53. SysFreeString(bstrText);
  54.  
  55. /******* BSTR -> CString *******/
  56. //BSTR bstrText = ::SysAllocString(L"Test");
  57. //CString cstr;
  58. //cstr.Empty();
  59. //cstr = bstrText;
  60. // 或 CStringA str(bstrText);
  61.  
  62. system("pause");
  63. return ;
  64. }

BSTR与char*、cstring、CComBSTR的转换的更多相关文章

  1. 转:char*, char[] ,CString, string的转换

    转:char*, char[] ,CString, string的转换 (一) 概述 string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准 ...

  2. VC中BSTR、Char和CString类型的转换

    1.char*转换成CString 若将char*转换成CString,除了直接赋值外,还可使用CString::format进行.例如: char chArray[] = "This is ...

  3. MFC中char*,string和CString之间的转换

    MFC中char*,string和CString之间的转换 一.    将CString类转换成char*(LPSTR)类型 方法一,使用强制转换.例如:  CString theString( &q ...

  4. CString string char* char 之间的字符转换(多种方法)

    在写程序的时候,我们经常遇到各种各样的类型转换,比如 char* CString string 之间的互相转换.首先解释下三者的含义. CString 是一种很有用的数据类型.它们很大程度上简化了MF ...

  5. Char* ,CString ,WCHAR*之间的转换

    关于Char* ,CString ,WCHAR*之间的转换问题 GDI+所有类的接口函数如果要传递字符串作为参数的话,似乎都用UNICODE串,即WCHAR*.我开始也被整得晕头转向,因为窗口编程所用 ...

  6. CString与string、char*的区别和转换

    转自:http://blog.csdn.net/luoweifu/article/details/20232379 我们在C++的开发中经常会碰到string.char*以及CString,这三种都表 ...

  7. 【转】CString与string、char*的区别和转换

    我们在C++的开发中经常会碰到string.char*以及CString,这三种都表示字符串类型,有很多相似又不同的地方,常常让人混淆.下面详细介绍这三者的区别.联系和转换: 各自的区别 char*: ...

  8. MFC string char cstring 类型转换

    在Unicode环境下用以下转换: CString z_strCurtTime = _T(""); // 获取当前时间 CTime z_tCurTime = CTime::GetC ...

  9. NSString / NSData / char* 类型之间的转换

    转自网络: NSString / NSData / char* 类型之间的转换 1. NSString转化为UNICODE String: (NSString*)fname = @“Test”; ch ...

  10. char类型的数值转换

    在视频教程中,你已经认识到了数字类型之间.字符串和其他类型之间的转换.而某些时候,我们还需要将char类型转换为int类型,或者把int类型转换为char类型. 这篇文章,将介绍在代码中虽然不太常用, ...

随机推荐

  1. 基于CSS3自定义美化复选框Checkbox组合

    今天我们要来分享一组非常漂亮的CSS3自定义复选框checkbox,每一个checkbox都有其各自的特点.有几款checkbox在选中的情况下还会出现动画效果,非常不错的CSS3自定义美化check ...

  2. 利用struts2<s:token>标签防止用户重复提交

    当用户填写完表单后,在提交过一次后,若用户做如下操作比如再次点击提交.刷新页面.提交页面呈现后点击后退按钮,都会导致表单重复提交.如果信息需要存储到后台数据库中,重复提交就会再次向数据库中插入用户信息 ...

  3. winform文本框不能粘贴、复制和屏蔽右键

    有3个常用方法 1.MouseMove事件中,使选不中 private void textBox3_MouseMove(object sender, MouseEventArgs e) { if (t ...

  4. Fiddler2 java代码拦截设置

    jre -DproxySet=true -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888 Or: jre -DproxySet=true -Dproxy ...

  5. lua中table如何安全移除元素

    在Lua中,table如何安全的移除元素这点挺重要,因为如果不小心,会没有正确的移除,造成内存泄漏. 引子 比如有些朋友常常这么做,大家看有啥问题 将test表中的偶数移除掉local test = ...

  6. Config文件的使用:通过程序修改Config文件

    对于config文件,一般情况下都是使用ConfigurationManager加载,然后通过读取相应节点的值来获取想要的数据,但是,有时候需要修改config文件的值,这时候就用到了OpenExeC ...

  7. java- ★学习资源★

    何静媛: http://blog.csdn.net/hejingyuan6/article/category/2367993 孤傲苍狼-java基础总结: http://www.cnblogs.com ...

  8. [ Laravel 5.1 文档 ] 服务 —— 任务调度

    1.简介 在以前,开发者需要为每一个需要调度的任务编写一个Cron条目,这是很让人头疼的事.你的任务调度不在源码控制中,你必须使用SSH登录到服务器然后添加这些Cron条目.Laravel命令调度器允 ...

  9. ggplot2学习

    R语言里面一个比较重要的绘图包——ggplot2,是由Hadley Wickham于2005年创建,于2012年四月进行了重大更新,作者目前的工作是重写代码,简化语法,方便用户开发和使用.ggplot ...

  10. 网络协议之socks---子网和公网的穿透

    http://www.cnblogs.com/imyijie/p/4595889.html