1) char*转换成CString
若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。 2) CString转换成char* 方法一,使用强制转换。例如: 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。例如: #pragma comment(lib, "comsupp.lib") BSTR bstrText = ::SysAllocString(L"Test"); char* lpszText2 = _com_util::ConvertBSTRToString(bstrText); SysFreeString(bstrText); // 用完释放 delete[] lpszText2; 方法二,使用_bstr_t的赋值运算符重载。例如: _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); |
BSTR、char*和CString转换(转)
最新推荐文章于 2021-12-22 11:24:00 发布