c++ com mfc vc6 mshtml

c++ - problema con IHTMLDocument2:: write()



com mfc (2)

Estoy tratando de crear un objeto de documento mshtml desde un búfer html. Pero cuando se ejecuta el siguiente código, está invocando la ventana de Internet Explorer. ¿Cómo evito que invoque IE?

#include <atlbase.h> #include <mshtml.h> CoInitialize(NULL); CString strHTMLCode = _T("<html><head><script language=/"JavaScript/">{top.location.href=/"index.php/"}</script></head><body></body></html>"); CComPtr<IHTMLDocument2> pDoc; HRESULT hr = CoCreateInstance(CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER, IID_IHTMLDocument2, (void**)&pDoc); SAFEARRAY* psa = SafeArrayCreateVector(VT_VARIANT, 0, 1); VARIANT *param; hr = SafeArrayAccessData(psa, (LPVOID*)¶m); param->vt = VT_BSTR; param->bstrVal = strHTMLCode.AllocSysString(); hr = pDoc->write(psa); //This line invoks internet explorer window. hr = pDoc->close();


Por favor, prueba los códigos a continuación.

CoInitialize(NULL); CString strHTMLCode = "..."; CComPtr<IHTMLDocument2> pDoc; HRESULT hr = CoCreateInstance(CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER, IID_IHTMLDocument2, (void**)&pDoc); // get persist stream init ComQIPtr<IPersistStreamInit> psi = doc; // allocate memory HGLOBAL hMem = ::GlobalAlloc(GPTR, strHTMLCode.GetLength() * sizeof(TCHAR)); ::GlobalLock(hMem); ::CopyMemory(hMem, (LPCTSTR)strHTMLCode, strHTMLCode.GetLength() * * sizeof(TCHAR)); // create stream IStream* stream = NULL; HRESULT hr = ::CreateStreamOnHGlobal(hMem, FALSE, &stream); if (SUCCEEDED(hr)) { // load html string psi->Load(stream); stream->Release(); } // free memory ::GlobalUnlock(hMem); ::GlobalFree(hMem);


OLECHAR szHTML[] = OLESTR("<HTML><BODY>Hello World!</BODY></HTML>"); IHTMLDocument2 *pDoc = NULL; CoInitialize(NULL); CoCreateInstance(CLSID_HTMLDocument, NULL, CLSCTX_INPROC_SERVER, IID_IHTMLDocument2, (LPVOID *)&pDoc); if(pDoc) { IPersistStreamInit *pPersist = NULL; pDoc->QueryInterface(IID_IPersistStreamInit, (LPVOID *) &pPersist); if(pPersist) { IMarkupServices *pMarkSvr = NULL; pPersist->InitNew(); pPersist->Release(); pDoc->QueryInterface(IID_IMarkupServices, (LPVOID *)&pMarkSvr); if(pMarkSvr) { IMarkupContainer *pMkContainer = NULL; IMarkupPointer *pMkStart = NULL; IMarkupPointer *pMkFinish = NULL; pMarkSvr->CreateMarkupPointer(&pMkStart); pMarkSvr->CreateMarkupPointer(&pMkFinish); pMarkSvr->ParseString(szHTML, 0, &pMkContainer, pMkStart, pMkFinish); if(pMkContainer) { IHTMLDocument2 *pNewDoc = NULL; pMkContainer->QueryInterface(IID_IHTMLDocument, (LPVOID *)&pNewDoc); if(pNewDoc) { // do anything with pNewDoc, in this case // get the body innerText. IHTMLElement *pBody; pNewDoc->get_body(&pBody); if(pBody) { BSTR strText; pBody->get_innerText(&strText); ShowMessage(strText); pBody->Release(); SysFreeString(strText); } pNewDoc->Release(); } pMkContainer->Release(); } if(pMkStart) pMkStart->Release(); if(pMkFinish) pMkFinish->Release(); pMarkSvr->Release(); } } pDoc->Release(); } CoUninitialize();

consulte: http://www.codeguru.com/cpp/in/ieprogram/article.php/c4385/Lightweight-HTML-Parsing-Using-MSHTML.htm#more