Quantcast
Channel: Visual C forum
Viewing all articles
Browse latest Browse all 15302

Which msxml version is Stable?

$
0
0
Which msxml version should be used to avoid memory leak ? As report indicates that MSXML has memory leakage.

Vikrant Khandare - India

I have my own Activex Control in which I’m parsing xml file using MSXML 3.0.I'm testing this control using MFC Dialog Application.

Main Dialog -> On click Handler -> Creates XMLDialog object & display's it(DoModal()).

XMLDialog has this Activex Control. In OnCreate() of active control I’m parsing XML file by calling ReadXML().

If I open & close XMLDialog 15-20 times or more & observe the Process memory it starts increasing. Below is my code.

#define CHECKHR(x) {hr = x; if (FAILED(hr)) goto CleanUp;}
#define SAFERELEASE(p) {if (p) {(p)->Release(); p = NULL;}}


CString CXML::ReadXML(int RunningMode,CString CurProjectPath)
{


   HRESULT         hr;
   VARIANT         vURL;
   _bstr_t         bstrName;
   VARIANT_BOOL    vb;
   

   hr = S_OK; //E_NOTIMPL;

   ::CoInitialize(NULL);
  
   CString ProjectXmlPath;

 
 if(RunningMode==rmOnline)
 {
  ProjectXmlPath = getenv("_HOME_CEPATH"); 
 }
 else
 {
  ProjectXmlPath = CurProjectPath;
 }

 ProjectXmlPath+="\\Project.xml";

 MSXML::IXMLDOMDocument *pXMLDocument = NULL;
 MSXML::IXMLDOMNode  *pParentNode = NULL;

 CHECKHR(CoCreateInstance(MSXML::CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, MSXML::IID_IXMLDOMDocument, (void**)&pXMLDocument));

 
 if(SUCCEEDED(hr))
 {
  
   VariantInit(&vURL);
   vURL.vt = VT_BSTR;
   V_BSTR(&vURL) = ProjectXmlPath.AllocSysString();
   CHECKHR(pXMLDocument->load(vURL, &vb));
   VariantClear(&vURL);
  ProjectInfoMap.clear();

 
  if(vb != VARIANT_FALSE)
  {

    
   if(pXMLDocument)
   { 
      // Get connections element
      MSXML::IXMLDOMElement* pElement = NULL;
      MSXML::IXMLDOMNode* pNode = NULL;
      MSXML::IXMLDOMNodeList* pFieldList = NULL;
     
      _bstr_t bstrNoteElem("Application");

      // get a list of all the note-elements
      CHECKHR(pXMLDocument->getElementsByTagName(bstrNoteElem, &pFieldList));


      if (pFieldList)
      { 
    
       unsigned long length = 0;
       CHECKHR(pFieldList->get_length((long*)&length));
       unsigned long index = 0;

       while (index < length)
       {
        // find the next field-object in the collection
        CHECKHR(pFieldList->get_item(index, &pNode));

        CHECKHR(pNode->QueryInterface(MSXML::IID_IXMLDOMElement,(void**)&pElement));
        _bstr_t bstrNote;
        _bstr_t Id;
        _bstr_t SWId;
        _bstr_t DefaultEffectStyle;
        _bstr_t Rev;
        _bstr_t Guid;
        _bstr_t Apptype;

        VARIANT varVal;
        VariantInit(&varVal);
        pElement->getAttribute(L"Id",&varVal);
        Id = (LPCTSTR)varVal.bstrVal;
        VariantClear(&varVal);

        pElement->getAttribute(L"SWId",&varVal);
        SWId = (LPCTSTR)varVal.bstrVal;
        VariantClear(&varVal);
        pElement->getAttribute(L"DefaultEffectStyle",&varVal);
        DefaultEffectStyle = (LPCTSTR)varVal.bstrVal;
        VariantClear(&varVal);

        pElement->getAttribute(L"Rev",&varVal);
        Rev = (LPCTSTR)varVal.bstrVal;
        VariantClear(&varVal);
        pElement->getAttribute(L"Guid",&varVal);
        Guid = (LPCTSTR)varVal.bstrVal;
        VariantClear(&varVal);
        pElement->getAttribute(L"Apptype",&varVal);
        Apptype = (LPCTSTR)varVal.bstrVal;
        VariantClear(&varVal);
        ReadLevelNode(pElement,Id,SWId,DefaultEffectStyle,Rev,Guid,Apptype);
        SAFERELEASE(pElement);
        SAFERELEASE(pNode);

        index++;
     }

     SAFERELEASE(pFieldList);
    
    }
    }
  }
  
 }
 else
 {
  // Error in parsing
  hr = GetXMLErrorCode(pXMLDocument);      
 }

   
   CleanUp:
   if (FAILED(hr))
   {

   }

   pXMLDocument = NULL;
   SAFERELEASE(pXMLDocument);

   ::CoUninitialize();

 return "";
}



Viewing all articles
Browse latest Browse all 15302

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>