⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 robin显示内存网页的两种方法比较.txt

📁 本文介绍的是使用mshtml接口中方法显示内存中的html文件的两种方法和执行时间的比较
💻 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 + -