如题。谢谢帮忙。

解决方案 »

  1.   

    五、BSTR、char*和CString转换   (1) char*转换成CString   若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如: char chArray[] = "This is a test"; 
    char * p = "This is a test";   或 LPSTR p = "This is a test";   或在已定义Unicode应的用程序中 TCHAR * p = _T("This is a test");   或 LPTSTR p = _T("This is a test"); 
    CString theString = chArray; 
    theString.Format(_T("%s"), chArray); 
    theString = p;   (2) CString转换成char*   若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:   方法一,使用强制转换。例如: 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。例如: #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); // 用完释放   (6) BSTR转换成CString   一般可按下列方法进行: BSTR bstrText = ::SysAllocString(L"Test"); 
    CStringA str; 
    str.Empty(); 
    str = bstrText;   或 CStringA str(bstrText); 
      

  2.   

    CString.GetBuffer or CString.LPCTSTR
      

  3.   

    CString str = "Hello";
    char* ch = str.GetBuffer(0);//获得CString对象的字符串缓冲区指针