📄 robin显示内存网页的两种方法比较.txt
字号:
方法一:把内存的数据封装在SAFEARRAY中 通过IHTMLDocument2接口的write()函数显示
SAFEARRAY *pSafeArray=NULL;
SAFEARRAYBOUND arrayBound = {1, 0};
VARIANT *pVariant=NULL;
BSTR bstr=NULL;
IHTMLDocument2 *pHtmlDoc = NULL;
IDispatch *pDispatch=NULL;
IWebBrowser2 *pWebBrowser2 = NULL;
if(S_OK!=GetApplication()->QueryInterface(IID_IWebBrowser2, (void**)&pWebBrowser2))
{
return false;
}
pWebBrowser2->get_Document(&pDispatch);
pWebBrowser2->Release();
if (S_OK!=pDispatch->QueryInterface(IID_IHTMLDocument2, (void**)&pHtmlDoc))
{
return false;
}
pDispatch->Release();
if (pSafeArray = SafeArrayCreate(VT_VARIANT, 1, (SAFEARRAYBOUND *)&arrayBound))
{
if (S_OK==SafeArrayAccessData(pSafeArray, (void**)&pVariant))
{
USHORT nSize = MultiByteToWideChar(CP_ACP, 0, m_chMemPage, -1, 0, 0);
OLECHAR *pBuffer=NULL;
pBuffer=new OLECHAR[sizeof(OLECHAR) * nSize];
if (NULL==pBuffer)
{
SafeArrayUnaccessData(pSafeArray);
SafeArrayDestroy(pSafeArray);
pHtmlDoc->Release();
return false;
}
MultiByteToWideChar(CP_ACP, 0, m_chMemPage, -1, pBuffer, nSize);
bstr = SysAllocString(pBuffer);
delete pBuffer;
pVariant->vt = VT_BSTR;
pVariant->bstrVal = bstr;
pHtmlDoc->write(pSafeArray);
pHtmlDoc->close();
SysFreeString(bstr);
}
SafeArrayDestroy(pSafeArray);
}
pHtmlDoc->Release();
方法二:把内存的数据封装在IStream中 通过IPersistStreamInit接口的>Load()函数显示
CComQIPtr<IPersistStreamInit> pIPersistStreamInit=GetHtmlDocument();
if (pIPersistStreamInit )
{
if (S_OK==pIPersistStreamInit->InitNew())
{
IStream* pStream;
HGLOBAL hHTMLText = GlobalAlloc( GPTR, _tcslen(m_chMemPage)+1);
if ( hHTMLText )
{
_tcscpy((TCHAR*)hHTMLText, m_chMemPage);
if ( S_OK==CreateStreamOnHGlobal( hHTMLText, TRUE, &pStream))
{
pIPersistStreamInit->Load( pStream );
}
GlobalFree( hHTMLText );
}
}
}
两种方法执行时间比较的方法 测试内存的网页为:百度、谷歌和网易
clock_t c =clock(); //执行时间测试
//此处为上述两种方法
c = clock() - c;
CString str;
str.Format("%f",(double)c /(double) CLK_TCK);
AfxMessageBox(str);
比较结果
方法一平均时间:0.016秒
方法二平均时间:0.000秒
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -