如何将_bstr_t转换成CComBSTR对象?我查找MSDN发现有两个方法,但不知道哪个是正确和高效的
方法一:_bstr_t bstr = "test";
CComBSTR tar= bstr.GetBSTR();
方法二:_bstr_t bstr = "test";
CComBSTR tar;
tar.Attach(bstr.copy());
谢谢各位达人解答

解决方案 »

  1.   

    inline BSTR& _bstr_t::GetBSTR()  
    {
        if (m_Data == NULL) {
            m_Data = new Data_t(0, FALSE);
            if (m_Data == NULL) {
                _com_issue_error(E_OUTOFMEMORY);
            }
        }
        return m_Data->GetWString();
    }inline wchar_t*& _bstr_t::Data_t::GetWString() throw()
    {
        return m_wstr;
    }inline BSTR _bstr_t::Data_t::Copy() const 
    {
        if (m_wstr != NULL) {
            BSTR bstr = ::SysAllocStringByteLen(reinterpret_cast<char*>(m_wstr), ::SysStringByteLen(m_wstr));        if (bstr == NULL) {
                _com_issue_error(E_OUTOFMEMORY);
            }        return bstr;
        }    return NULL;
    }两个都行.
      

  2.   

    方法一中是不是在转换过后,bstr和tar都操作同一块内存?