1. 程式人生 > >VC++通過MSXML6來操作xml需要注意的記憶體洩漏問題

VC++通過MSXML6來操作xml需要注意的記憶體洩漏問題

VC++通過MSXML6來操作xml需要注意的記憶體洩漏問題

1. 建立IXMLDOMDocument 物件,注:在使用完成後需要release,而不是立馬release,立馬釋放了就沒法使用了

     HRESULT hr;
IXMLDOMDocument *pXmlDoc = NULL;
 
hr = CoCreateInstance(__uuidof(DOMDocument),NULL,CLSCTX_INPROC_SERVER,

__uuidof(IXMLDOMDocument),(void**)&pXmlDoc);


        pXmlDoc->Release();

2. 獲取IXMLDOMNode, 同上,需要使用完成後釋放

     IXMLDOMNode* pXMLFirstChild = NULL;

pIXMLDOMDocument->get_firstChild(&pXMLFirstChild);


        pXMLFirstChild.Release();

3. 獲取屬性集IXMLDOMNamedNodeMap,  同上,需要使用完成後釋放

     IXMLDOMNamedNodeMap* pXMLAttributeMap = NULL;
if (pXMLFirstChild)
{
pXMLFirstChild->get_attributes(&pXMLAttributeMap);

}


        pXMLAttributeMap.Release();

4. 建立屬性IXMLDOMAttribute, 同上,需要使用完成後釋放

IXMLDOMAttribute* pEncodeAttribute=NULL;

pIXMLDOMDocument->createAttribute( L"encoding",&pEncodeAttribute);

pXMLAttributeMap->setNamedItem(pEncodeAttribute, &pXMLEncodNode);


        pEncodeAttribute.Release();


5. 獲取節點內容,需要釋放

BSTR bstr = NULL;

pNode->get_text( &bstr);

if(bstr)

{

SysFreeString(bstr);

}