• VC中BSTR、Char*、CString和CComBSTR类型的转换


    原文:http://blog.csdn.net/wanghaihao_1/article/details/37498689

    1、char*转换成CString

    若将char*转换成CString,除了直接赋值外,还可使用CString::format进行。例如:

    char* p = "This is a test"; 或
    CString theString = p;
    theString.format("%s", p);
    theString = p;

    2、CString转换成char*

    若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:

    方法一,使用强制转换。例如:

    CString theString( "This is a test" );
    LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString; 方法二,使用strcpy。例如:

    CString theString( "This is a test" );
    LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
    _tcscpy(lpsz, theString); 需要说明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。

    方法三,使用CString::GetBuffer。例如:

    CString s(_T("This is a test "));
    LPTSTR p = s.GetBuffer();
    // 在这里添加使用p的代码
    if(p != NULL) *p = _T('/0');
    s.ReleaseBuffer(); // 使用完后及时释放,以便能使用其它的CString成员函数

    3、BSTR转换成char*

    方法一,使用ConvertBSTRToString。例如:

    #include #pragma comment(lib, "comsupp.lib")
    int _tmain(int argc, _TCHAR* argv[])
    {
    BSTR bstrText = ::SysAllocString(L"Test");
    char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);
    SysFreeString(bstrText); // 用完释放
    delete[] lpszText2;
    return 0;
    } 方法二,使用_bstr_t的赋值运算符重载,_bstr_t是对BSTR的封装。例如:

    _bstr_t b = bstrText;
    char* lpszText2 = b;

    4、char*转换成BSTR

    方法一,使用SysAllocString等API函数。例如:

    BSTR bstrText = ::SysAllocString(L"Test");
    BSTR bstrText = ::SysAllocStringLen(L"Test",4);
    BSTR bstrText = ::SysAllocStringByteLen("Test",4); 方法二,使用COleVariant或_variant_t。例如:

    //COleVariant strVar("This is a test");
    _variant_t strVar("This is a test");
    BSTR bstrText = strVar.bstrVal; 方法三,使用_bstr_t,这是一种最简单的方法。例如:

    BSTR bstrText = _bstr_t("This is a test"); 方法四,使用CComBSTR。例如:

    BSTR bstrText = CComBSTR("This is a test"); 或

    CComBSTR bstr("This is a test");
    BSTR bstrText = bstr.m_str; 方法五,使用ConvertStringToBSTR。例如:

    char* lpszText = "Test";
    BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);

    5、CString转换成BSTR

    通常是通过使用CStringT::AllocSysString来实现。例如:

    CString str("This is a test");
    BSTR bstrText = str.AllocSysString();
    SysFreeString(bstrText); // 用完释放

    6、BSTR转换成CString

    一般可按下列方法进行:

    BSTR bstrText = ::SysAllocString(L"Test");
    CStringA str;
    str.Empty();
    str = bstrText; 或

    CStringA str(bstrText);

    SysAllocString

    7.  CString转化为CComBSTR

    CString strName = "cert";

    CComBSTR xxx_strName = strName.AllocSysString();

    8.  CComBSTR转化为BSTR

    CComBSTR xxx_strName ;

    BSTR bstr = xxx_strName ;

    CComBSTR是对BSTR的封装,起内部实现了对BSTR的转化

     operator BSTR() const throw()
     {
      return m_str;
     }

    所以之后不需要SysFreeString

    9.  BSTR转化为CComBSTR

     BSTR bstrText = ::SysAllocString(L"Test");

    CComBSTR cbstr = bstrText;

    或者

    cbstr = bstrText;

     SysFreeString(bstrText); // 用完释放

  • 相关阅读:
    二 ,Smarty模板技术/引擎——变量操作(1)
    一,Smarty模板技术/引擎——简介
    MVC模式学习--雇员管理系统项目开发
    mysqli扩展库---------预处理技术
    drupal7 上传文件中文乱码
    php根据IP获取IP所在城市
    php获取客户端IP
    drupal中安装CKEditor文本编辑器,并配置图片上传功能 之 方法一
    drupal7的node的内容的存储位置
    drupal7 安装百度编辑器Ueditor及后续使用
  • 原文地址:https://www.cnblogs.com/lizhigang/p/6894048.html
Copyright © 2020-2023  润新知