1、CString转BSTR
BSTR bstr;
CString strSql;
bstr = strSql.AllocSysString();
…
SysFreeString(bstrText); // 用完释放
注意:用完之后必须使用SysFreeString 释放!!!
2、BSTR转CString
//方法一
BSTR bstr = ::SysAllocString(L"Test");
CString strSql;
strSql.Empty();
strSql = (LPCSTR)bstr;
//方法二
BSTR bstr = ::SysAllocString(L"Test");
CString str(bstr);
3、CString转_bstr_t
_bstr_t bstr;
CString strSql;
bstr = (_bstr_t)strSql;
4、_bstr_t转CString
_bstr_t bstr;
CString strSql;
strSql = (LPCSTR)bstr;
5、BSTR转char*
//方法一,使用ConvertBSTRToString
BSTR bstrText = ::SysAllocString(L"Test");
char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);
SysFreeString(bstrText); // 用完释放
delete[] lpszText2;
//方法二,使用_bstr_t的赋值运算符重载
_bstr_t b = bstrText;
char* lpszText2 = b;
6、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);
7、BSTR 转LPCTSTR
//方法一:
_bstr_t strstr = bstrtext;
LPCTSTR lpctstrname = strstr;
//方法二:
CString str = bstrtext;
LPCTSTR lpctstrname = (LPCTSTR)str;
8、LPCTSTR转CString
//方法一:
LPCTSTR lpctStr;
CString cStr=lpctStr;
//方法二:
LPCTSTR p;
CString str="hello";
p=str.GetBuffer(str.GetLength());
str.ReleaseBuffer();
9、CString转char*
//方法一
CString cstr = _T("test")
//声明标识
USES_CONVERSION;
//函数T2A和W2A均支持ATL和MFC中的字符
char * pFileName = T2A(cstr);
//char * pFileName = W2A(cstr); //也可实现转换
//注意:有时候可能还需要添加引用#include <afxpriv.h>
10、CString转char*
//方法一
char *p = "test";
CString str(p);
//方法二
char * pFileName = "test";
USES_CONVERSION;
CString s = A2T(pFileName);
//CString s = A2W(pFileName);