![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
1 // BSTR_Convert.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include// _com_util::ConvertBSTRToString 6 #include //CComBSTR 7 #include 8 9 #pragma comment(lib, "comsuppw.lib")10 11 using namespace _com_util;12 13 int _tmain(int argc, _TCHAR* argv[])14 {15 /****** BSTR->char* *****/16 //方法一使用 ConvertBSTRToString17 //BSTR bstrText = ::SysAllocString(L"Test");18 //char* lpszText = _com_util::ConvertBSTRToString(bstrText);19 //SysFreeString(bstrText);//用完释放20 //delete[] lpszText; 21 //方法二 使用_bstr_t的赋值运算符重载22 //_bstr_t b = bstrText;23 //char* lpstrText1 = b;24 25 /****** char*->BSTR *****/26 //方式一 使用SysAllocString等API函数 27 //BSTR bstrText = ::SysAllocString(L"Test");28 //BSTR bstrText1 = ::SysAllocStringLen(L"Test1",3); 29 //BSTR bstrText2 = ::SysAllocStringByteLen("Test2",4);//乱码30 31 //方式二 使用COleVariant或_variant 编译出错 属于MFC?无法再WIN32下使用?32 //COleVariant strVar("this is a test");33 //_variant_t strVar1("this is a test");34 //BSTR bstrText = strVar.bstrVal;35 //BSTR bstrText1 = strVar1.bstrVal;36 37 //方式三 方法三,使用_bstr_t,这是一种最简单的方法。38 //BSTR bstrText = _bstr_t("This is a test");39 40 //方法四,使用CComBSTR。例如: 41 //BSTR bstrText = CComBSTR("This is a test");42 //CComBSTR bstr1("This is a test"); 43 //BSTR bstrText1 = bstr1.m_str; 44 45 //方法五,使用ConvertStringToBSTR。46 //char* lpszText = "Test"; 47 //BSTR bstrText2 = _com_util::ConvertStringToBSTR(lpszText);48 49 /******* CString->BSTR *******/50 //通 常是通过使用CStringT::AllocSysString来实现51 CString cstr("this is a test");52 BSTR bstrText = cstr.AllocSysString();53 SysFreeString(bstrText);54 55 /******* BSTR -> CString *******/56 //BSTR bstrText = ::SysAllocString(L"Test");57 //CString cstr;58 //cstr.Empty();59 //cstr = bstrText; 60 // 或 CStringA str(bstrText);61 62 system("pause");63 return 0;64 }