1) char*转换成CString
若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如
char chArray[] = 'This is a test'; char * p = 'This is a test'; 或 LPSTR p = 'This is a test'; 或在已定义Unicode应的用程序中 TCHAR * p = _T('This is a test'); 或 LPTSTR p = _T('This is a test'); CString theString = chArray; theString.Format(_T('%s'), chArray); 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(''); s.ReleaseBuffer(); // 使用完后及时释放,以便能使用其它的CString成员函数
(3) BSTR转换成char*
方法一,使用ConvertBSTRToString。例如: 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 b = bstrText; char* lpszText2 = b;
方法一,使用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);