Здравствуйте leshka, Вы писали:
L>Привет!
L>Как можно загрузить HTML-код в IHTMLDocument2, если HTML-код имеется в виде IStream?
L>Заранее благодарен.
Не знаю, как именно со стримом
Советую посмотреть в MSDN "Loading HTML content from a Stream"
там все есть.
Шаги следующие:
— Navigating to about:blank
— Availability of the DHTML Object Model
— Using QueryInterface to Obtain the IPersistStreamInit Interface
— Using the IPersistStreamInit Interface to Load HTML Content
— Offline Reading
— Related Topics
Здравствуйте OlegO, Вы писали:
OO>// Собственно вот и сама функция, что-то с первого раза поленился послать :)
OO>HRESULT LoadWebBrowserFromStream(IWebBrowser* pWebBrowser, IStream* pStream) OO>{ OO>HRESULT hr; OO>IDispatch* pHtmlDoc = NULL; OO>IPersistStreamInit* pPersistStreamInit = NULL;
OO> // Retrieve the document object. OO> hr = pWebBrowser->get_Document( &pHtmlDoc ); OO> if ( SUCCEEDED(hr) ) OO> { OO> // Query for IPersistStreamInit. OO> hr = pHtmlDoc->QueryInterface( IID_IPersistStreamInit, (void**)&pPersistStreamInit ); OO> if ( SUCCEEDED(hr) ) OO> { OO> // Initialize the document. OO> hr = pPersistStreamInit->InitNew(); OO> if ( SUCCEEDED(hr) ) OO> { OO> // Load the contents of the stream. OO> hr = pPersistStreamInit->Load( pStream ); OO> } OO> pPersistStreamInit->Release(); OO> } OO> } OO>}
Спасибо, я так пробовал, но почему-то не проходит.
Подозреваю, что проблема из-за IStream. Он вообще char-овский, пробовал также OLECHAR-овский, все равно не проходит.
L>Спасибо, я так пробовал, но почему-то не проходит. L>Подозреваю, что проблема из-за IStream. Он вообще char-овский, пробовал также OLECHAR-овский, все равно не проходит.
PS: посмотри статью что я указывал выше, там есть рабочий пример.
С уважением, OlegO.
Re[5]: Загрузить IHTMLDocument2 из IStream
От:
Аноним
Дата:
28.01.02 15:27
Оценка:
Здравствуйте OlegO, Вы писали:
L>>Спасибо, я так пробовал, но почему-то не проходит. L>>Подозреваю, что проблема из-за IStream. Он вообще char-овский, пробовал также OLECHAR-овский, все равно не проходит.
OO>Вот рабочий код создания IStream:
OO>PS: посмотри статью что я указывал выше, там есть рабочий пример.
Да, я так тоже пробовал, но не получалось. Только сейчас я наконец вспомнил про асинхронность, метод Load из IPersistStreamInit грузит асинхронно, а я почему-то про это и не подумал сразу. Но теперь все заработало, спасибо. :))
Здравствуйте VladD2, Вы писали:
VD>Здравствуйте OlegO
Все хорошо. И это все работает, усли в броузере сидит HTML документ. Если же там открыт Word, то мы мило уходим ничего не сделав. Ну нет в Word-е IPersistStreamInit.
А посему вопрос. Как из контрола выгрузить Word и вернуть HTML документ?
VD>
Здравствуйте svld, Вы писали:
S>Все хорошо. И это все работает, усли в броузере сидит HTML документ. Если же там открыт Word, то мы мило уходим ничего не сделав. Ну нет в Word-е IPersistStreamInit. S>А посему вопрос. Как из контрола выгрузить Word и вернуть HTML документ?
Сначала сделать Navigate на "about:blank" и продолжить работу см.Выше.
Platform SDK: COM
IPersistStreamInit::Load
...
Remarks
If the object has already been initialized with InitNew, then this method must return E_UNEXPECTED
Vi2>Как это (выделенные строчки) согласуется с MSDN? Vi2>
Vi2>Platform SDK: COM
Vi2>IPersistStreamInit::Load
Vi2>...
Vi2>Remarks
Vi2>If the object has already been initialized with InitNew, then this method must return E_UNEXPECTED
Vi2>
Здравствуйте Vi2, Вы писали:
Vi2>>Как это (выделенные строчки) согласуется с MSDN? Vi2>>
Vi2>>Platform SDK: COM
Vi2>>IPersistStreamInit::Load
Vi2>>...
Vi2>>Remarks
Vi2>>If the object has already been initialized with InitNew, then this method must return E_UNEXPECTED
Vi2>>
Vi2>Чтобы не буть голословным Vi2>Для InitNew Vi2>Для Load
Здравствуйте OlegO, Вы писали:
OO>Видимо никак, так эта функция тоже из MSDN: OO>Loading HTML content from a Stream OO>Причем этот код успешно работает, так что видимо Ремарка не права, хотя может пока
Что ж хозяин — барин, это я к Мелкософту.
Цитата оттуда (Loading HTML content from a Stream)
MS>Note In Microsoft Internet Explorer 5, more than one call to the Load method of the IPersist interfaces is supported. In earlier versions, only one call to Load per instance of MSHTML is supported.
Здравствуйте Vi2, Вы писали:
Vi2>Здравствуйте OlegO, Вы писали:
OO>>Видимо никак, так эта функция тоже из MSDN: OO>>Loading HTML content from a Stream OO>>Причем этот код успешно работает, так что видимо Ремарка не права, хотя может пока
Vi2>Что ж хозяин — барин, это я к Мелкософту. Vi2>Цитата оттуда (Loading HTML content from a Stream)