Prev: what is "Not enough quota is available to process this command" ?
Next: Blog: Tools for C++ Static Analysis
From: Fede on 9 Feb 2009 19:43 Hi Everyone, It is my first post in this group and I would appreciate some help in making IViewObject:Draw / IWebbrowser2 / IHTMLDocument2 interfaces. The moment I call the IViewObject:Draw interface it returns E_FAIL. I am working in plain C and COM (no ATL/MFC/etc.). In a nutshell, this is the code: IWebBrowser2* pWBApp = NULL; CoInitialize(NULL); CoCreateInstance(CLSID_InternetExplorer, NULL, CLSCTX_SERVER, IID_IWebBrowserApp, (LPVOID*)&pWBApp); BSTR bstrURL = SysAllocString(L"www.google.com"); ..... hresult = pWBApp->Navigate(bstrURL, &vFlags, &vTargetFrameName, &vPostData, &vHeaders); pWBApp->put_Visible(VARIANT_TRUE); HRESULT hr; IDispatchPtr spDisp1; hr = pWBApp->get_Document(&spDisp1); IHTMLDocument2 * pHtmlDoc = NULL; hr = spDisp1->QueryInterface(IID_IHTMLDocument2, (void**)&pHtmlDoc); IViewObject* vo; hr = pHtmlDoc->QueryInterface(__uuidof(IViewObject), (void **)&vo); RECTL rect; pWBApp->get_Width(&m_width); pWBApp->get_Height(&m_height); rect.bottom = m_height; rect.left = 0; rect.right = m_width; rect.top = 0; long l; hr = pWBApp->get_HWND(&l); HDC hScreenDC = ::GetDC((HWND) l); hMemDC = CreateCompatibleDC(hScreenDC); HBITMAP hBitmap = CreateCompatibleBitmap(hdc, m_width, m_height); SelectObject(hMemDC, hBitmap); hr = vo->Draw(DVASPECT_CONTENT, 1, NULL, NULL, 0, hMemDC, &rect, NULL, NULL, 0); =>> RETURNS E_FAIL Thanks!! Fede
From: Igor Tandetnik on 9 Feb 2009 19:57
Fede <federico.sucari(a)gmail.com> wrote: > It is my first post in this group and I would appreciate some help in > making IViewObject:Draw / IWebbrowser2 / IHTMLDocument2 interfaces. > The moment I call the IViewObject:Draw interface it returns E_FAIL. I > am working in plain C and COM (no ATL/MFC/etc.). > > In a nutshell, this is the code: > > IWebBrowser2* pWBApp = NULL; > CoInitialize(NULL); > CoCreateInstance(CLSID_InternetExplorer, > NULL, > CLSCTX_SERVER, > IID_IWebBrowserApp, > (LPVOID*)&pWBApp); You are creating a standalone instance of Internet Explorer, in a separate process. IViewObject is not marshallable, it doesn't work across a process boundary. What you are trying to do has any hope of working only if you host an instance of WebBrowser control in-process. In addition, you are requesting IWebBrowserApp pointer, but storing it in a IWebBrowser2* variable. This is an illegal downcast. The IID and the variable type have to match. -- With best wishes, Igor Tandetnik With sufficient thrust, pigs fly just fine. However, this is not necessarily a good idea. It is hard to be sure where they are going to land, and it could be dangerous sitting under them as they fly overhead. -- RFC 1925 |