Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Thanks Amnon, the following code is mostly working for me.</p> <pre><code>// an implementation of a write-only IStream. // needed because the CreateStreamOnHGlobal implementation doesn't handle // resizes well (N writes seem to take O(N^2) time) class MyStream : public CComObjectRootEx&lt;CComSingleThreadModel&gt;, public CComCoClass&lt;MyStream&gt;, public IStream { public: std::vector&lt;char&gt; buf; BEGIN_COM_MAP(MyStream) COM_INTERFACE_ENTRY(IStream) END_COM_MAP() STDMETHOD(Write) (const void * pv, ULONG cb, ULONG *pcbWritten); // Implement IStream abstract functions STDMETHOD(Read) (void *pv, ULONG cb, ULONG *pcbRead) { return S_OK; }; STDMETHOD(Seek) (LARGE_INTEGER dlibMove,DWORD dwOrigin,ULARGE_INTEGER *plibNewPosition) { return S_OK; }; STDMETHOD(SetSize) (ULARGE_INTEGER libNewSize) { return S_OK; }; STDMETHOD(CopyTo) (IStream *pstm,ULARGE_INTEGER cb,ULARGE_INTEGER *pcbRead,ULARGE_INTEGER *pcbWritten) { return S_OK; }; STDMETHOD(Commit) (DWORD grfCommitFlags) { return S_OK; }; STDMETHOD(Revert) () { return S_OK; }; STDMETHOD(LockRegion) (ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) { return S_OK; }; STDMETHOD(UnlockRegion) (ULARGE_INTEGER libOffset,ULARGE_INTEGER cb,DWORD dwLockType) { return S_OK; }; STDMETHOD(Stat) (__RPC__out STATSTG *pstatstg,DWORD grfStatFlag) { return S_OK; }; STDMETHOD(Clone) (__RPC__deref_out_opt IStream **ppstm) { return S_OK; }; }; STDMETHODIMP MyStream::Write(const void * pv, ULONG cb, ULONG *pcbWritten) { buf.insert(buf.end(), (char*)pv, (char*)pv+cb); return S_OK; } // Retrieves the HTML of the current page STDMETHODIMP CPlugin::get_HTML(long lMaxSize, BSTR *pbstrHTML) { HRESULT hr = S_OK; try { CComPtr&lt;IDispatch&gt; pDispatch; MSHTML::IHTMLDocumentPtr pDocument = NULL; CComPtr&lt;IStream&gt; mystream; hr = MyStream::CreateInstance(&amp;mystream); // streamObj will be valid as long as IStream smart pointer lives MyStream *streamObj = (MyStream*)mystream.p; hr = m_spWebBrowser-&gt;get_Document(&amp;pDispatch); hr = pDispatch-&gt;QueryInterface(IID_IHTMLDocument, (void**)&amp;pDocument); IPersistStreamInitPtr persistStream = pDocument; hr = CreateStreamOnHGlobal(NULL, TRUE, &amp;stream); hr = persistStream-&gt;Save(mystream, FALSE); } catch(...) { TRACE_FN("Got exception somewhere"); } return hr; } </code></pre> <p>Now the only problem left is how to figure why some it returns me single-byte chars most times, and double-byte chars at other times. Any ideas?</p> <p>Thanks for the help.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload