BSTR、char*和CString转换

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

        

[cpp]  view plain copy
  1. char chArray[] = 'This is a test';  
  2. char * p = 'This is a test';  
  3.   
  4.   或  
  5.   
  6. LPSTR p = 'This is a test';  
  7.   
  8.   或在已定义Unicode应的用程序中  
  9.   
  10. TCHAR * p = _T('This is a test');  
  11.   
  12.   或  
  13.   
  14. LPTSTR p = _T('This is a test');  
  15. CString theString = chArray;  
  16. theString.Format(_T('%s'), chArray);  
  17. theString = p;  

(2) CString转换成char*

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

       

[cpp]  view plain copy
  1. 方法一,使用强制转换。例如:  
  2.   
  3. CString theString( 'This is a test' );  
  4. LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;  
  5.   
  6.   方法二,使用strcpy。例如:  
  7.   
  8. CString theString( 'This is a test' );  
  9. LPTSTR lpsz = new TCHAR[theString.GetLength()+1];  
  10. _tcscpy(lpsz, theString);  
  11.   
  12.   需要说明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。  
  13.   
  14.   方法三,使用CString::GetBuffer。例如:  
  15.   
  16. CString s(_T('This is a test '));  
  17. LPTSTR p = s.GetBuffer();  
  18. // 在这里添加使用p的代码  
  19. if(p != NULL) *p = _T('');  
  20. s.ReleaseBuffer();  
  21. // 使用完后及时释放,以便能使用其它的CString成员函数  


(3) BSTR转换成char*    

[cpp]  view plain copy
  1. 方法一,使用ConvertBSTRToString。例如:  
  2.   
  3.             pragma comment(lib, 'comsupp.lib')  
  4.           int _tmain(int argc, _TCHAR* argv[])  
[cpp]  view plain copy
  1. {  
  2.     BSTR bstrText = ::SysAllocString(L'Test');  
  3.     char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);  
  4.     SysFreeString(bstrText); // 用完释放  
  5.       delete[] lpszText2;  
  6.     return 0;  

}

[cpp]  view plain copy
  1. 方法二,使用_bstr_t的赋值运算符重载。例如:  
  2.   
  3. _bstr_t b = bstrText;  
  4. char* lpszText2 = b;  

        (4) char*转换成BSTR

  

[cpp]  view plain copy
  1. 方法一,使用SysAllocString等API函数。例如:  
  2.   
  3. BSTR bstrText = ::SysAllocString(L'Test');  
  4. BSTR bstrText = ::SysAllocStringLen(L'Test',4);  
  5. BSTR bstrText = ::SysAllocStringByteLen('Test',4);  
  6.   
  7.   方法二,使用COleVariant或_variant_t。例如:  
  8.   
  9. //COleVariant strVar('This is a test');  
  10. _variant_t strVar('This is a test');  
  11. BSTR bstrText = strVar.bstrVal;  
  12.   
  13.   方法三,使用_bstr_t,这是一种最简单的方法。例如:  
  14.   
  15. BSTR bstrText = _bstr_t('This is a test');  
  16.   
  17.   方法四,使用CComBSTR。例如:  
  18.   
  19. BSTR bstrText = CComBSTR('This is a test');  
  20.   
  21.   或  
  22.   
  23. CComBSTR bstr('This is a test');  
  24. BSTR bstrText = bstr.m_str;  
  25.   
  26.   方法五,使用ConvertStringToBSTR。例如:  
  27.   
  28. char* lpszText = 'Test';  
  29. BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);  

 

(5) CString转换成BSTR
     

[cpp]  view plain copy
  1. 通常是通过使用CStringT::AllocSysString来实现。例如:  
  2.   
  3. CString str('This is a test');  
  4. BSTR bstrText = str.AllocSysString();  
  5. …  
  6. SysFreeString(bstrText); // 用完释放  

(6) BSTR转换成CString
 

[cpp]  view plain copy
  1. 一般可按下列方法进行:  
  2.   
  3. BSTR bstrText = ::SysAllocString(L'Test');  
  4. CStringA str;  
  5. str.Empty();  
  6. str = bstrText;  
  7.   
  8.   或  
  9.   
  10. CStringA str(bstrText);  

你可能感兴趣的:(BSTR、char*和CString转换)