VC中BSTR、Char*、CString和CComBSTR类型的转换
来源:互联网 发布:ubuntu 16.04 amd驱动 编辑:程序博客网 时间:2024/05/07 02:38
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); // 用完释放
- VC中BSTR、Char*、CString和CComBSTR类型的转换
- VC中BSTR、Char*、CString和CComBSTR类型的转换
- VC中BSTR、Char*、CString和CComBSTR类型的转换
- VC中BSTR、Char和CString类型的转换
- VC中BSTR、Char和CString类型的转换
- VC中BSTR、Char和CString类型的转换
- vc中各种类型字符串的转换 CComBSTR Char BSTR LPSTR LPCTSTR LPWSTR
- Vc中BSTR,char和CString的转换
- Vc中BSTR,char和CString的转换
- VC中BSTR、Char和CString类型的转换(太牛了)
- 【转】VC中BSTR、Char和CString类型的转换(太牛了)
- VC中BSTR、Char和CString类型的转换(太牛了)
- vc中BSTR,char, wchar, cstring类型转换
- VC中BSTR、Char*、CString类型相互转换
- vc char* CString * BSTR之间的转换
- char * bstr CComBSTR 转换
- BSTR、char* 和 CString 之间的转换
- BSTR、char*和CString转换
- flex3和flex4的区别【转帖】
- 软件测试系列之(2)—性能测试过程和方法
- 数组方式下比较strtr, str_replace的效率
- ActionContext的介绍
- win7中无法安装Oracle 10g的解决方法
- VC中BSTR、Char*、CString和CComBSTR类型的转换
- 一封程序员的爱情表白
- 通过华为无线路由器(带猫)多人上网
- 未来数据库发展方向 智能管理型数据库
- redhat 5.4部署单机伪分布Hadoop集群
- WPF Apps With The Model-View-ViewModel Design Pattern
- 简单的表单验证代码javascript实现
- PKU1011 Sticks
- C# DataSet和DataTable详解(1)