Работам една програма Веб анализатор това ми е кључна функција
изгледот има 2 панела CLeftView и class CWebView : public CHtmlView.
DoDHTMLExplore го вади Html кодот го става во CLeftView pListView.
проблемот ми е што при секое повикување на DoDHTMLExplore прогресивно се зголемува рам меморијата.При нормална натовареност по 50 MB на час губи.Ако некој има идеја нека пише.
// MainFrm.h : interface of the CMainFrame class
public:void DoDHTMLExplore();
// MainFrm.cpp : implementation of the CMainFrame class
void CMainFrame:
oDHTMLExplore(void)
{CLeftView *pListView =
(CLeftView *)m_wndSplitter.GetPane(0,0);
CWebView * pDHTMLView =
(CWebView *)m_wndSplitter.GetPane(0,1);
pListView->GetListCtrl().DeleteAllItems(); //Clear the view and set it up in single mode.
IDispatch* pDisp = pDHTMLView->GetHtmlDocument();
if (pDisp != NULL )
{
IHTMLDocument2* pHTMLDocument2;
HRESULT hr;
hr = pDisp->QueryInterface( IID_IHTMLDocument2, (void**)&pHTMLDocument2 );
if (hr == S_OK)
{
IHTMLElementCollection* pColl = NULL;
hr = pHTMLDocument2->get_all( &pColl );
if (hr == S_OK && pColl != NULL)
{
LONG celem;
hr = pColl->get_length( &celem );
if ( hr == S_OK )
{
for ( int i=0; i< celem; i++ )
{
VARIANT varIndex;
varIndex.vt = VT_UINT;
varIndex.lVal = i;
VARIANT var2;
VariantInit( &var2 );
IDispatch* pDisp;
hr = pColl->item( varIndex, var2, &pDisp );
if ( hr == S_OK )
{
IHTMLElement* pElem;
hr = pDisp->QueryInterface( IID_IHTMLElement, (void **)&pElem );
if ( hr == S_OK )
{
BSTR bstr;
hr = pElem->get_tagName(&bstr);
CString strTag = bstr;
IHTMLImgElement* pImgElem;
//Is it an image element?
hr = pDisp->QueryInterface( IID_IHTMLImgElement, (void **)&pImgElem );
if ( hr == S_OK )
{
pImgElem->get_href(&bstr);
strTag += " - ";
strTag += bstr;
pImgElem->Release();
}
else
{
IHTMLAnchorElement* pAnchElem;
//Is it an anchor?
hr = pDisp->QueryInterface( IID_IHTMLAnchorElement, (void **)&pAnchElem );
if ( hr == S_OK )
{
pAnchElem->get_href(&bstr);
strTag += " - ";
strTag += bstr;
pAnchElem->Release();
}
}
pListView->GetListCtrl().InsertItem(
pListView->GetListCtrl().GetItemCount(),strTag);
pElem->Release();
}
pDisp->Release();
}
}
}
pColl->Release();
}
pHTMLDocument2->Release();
}
pDisp->Release();
}
}