//------------------------------------------------------------------------- // Function Name :GetLastError // Parameter(s) :void // Return :CString // Memo :获取最后的出错信息 //------------------------------------------------------------------------- CString CXml::GetLastError(void) { ASSERT( m_pDoc != NULL ); HRESULT hr = S_OK; MSXML2::IXMLDOMParseErrorPtr pIParseError = NULL; hr = m_pDoc->get_parseError(&pIParseError); ASSERT( SUCCEEDED(hr) ); CString strRet; if( pIParseError != NULL ) { LONG value; BSTR bstr = NULL; hr = pIParseError->get_errorCode(&value); ASSERT( SUCCEEDED(hr) ); hr = pIParseError->get_reason(&bstr); ASSERT( SUCCEEDED(hr) ); strRet = (LPCTSTR)_bstr_t( bstr, true); if( bstr != NULL ) { SysFreeString(bstr); bstr = NULL; } SAFE_RELEASE(pIParseError); } return strRet; }
//////////////////////////////////////////////////////////////////////////// // Helper function: Check load results //////////////////////////////////////////////////////////////////////////// HRESULT CXMLDocument::CheckLoad() { // And since we don't have the VARIANT_BOOL from load we // need to check the parse Error errorCode property to see // if everything went ok. MSXML2::IXMLDOMParseErrorPtr pXMLError = NULL; HRESULT hr = m_pDoc->get_parseError(&pXMLError); hr = CheckHR(hr, "getting parse error"); long lErrorCode = NULL; if (pXMLError) { hr = pXMLError->get_errorCode(&lErrorCode); hr = CheckHR(hr, "getting error code"); if (lErrorCode) hr = ReportError(pXMLError); } return lErrorCode; }