方法三,使用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 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); // 用完释放 |

