Поиск:

Ответ в темуСоздание новой темы Создание опроса
> загрузка html в WEB компонент 
:(
    Опции темы
The Thing
Дата 17.3.2008, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: нет
Всего: 3



Только разбираюсь с технологий COM.
Просьба, подсказать как загрузить HTML код в браузер "НЕ ИЗ ФАЙЛА".
Я сгенерил код, и хочу его туда передать.

Код из MSDN IHTMLDocument2::write что-то не сработал.
Код

    IHTMLDocument2 *document; // Declared earlier in the code
    HRESULT hresult = S_OK;
    VARIANT *param;
    SAFEARRAY *sfArray;
    BSTR bstr = SysAllocString(OLESTR("Written by IHTMLDocument2::write()."));

    // Creates a new one-dimensional array
    sfArray = SafeArrayCreateVector(VT_VARIANT, 0, 1);
    
    if (sfArray == NULL || document == NULL) {
        goto cleanup;
    }

    hresult = SafeArrayAccessData(sfArray,(LPVOID*) & param);
    param->vt = VT_BSTR;
    param->bstrVal = bstr;
    hresult = SafeArrayUnaccessData(sfArray);
    hresult = document->write(sfArray);

cleanup:
    SysFreeString(bstr);
    if (sfArray != NULL) {
        SafeArrayDestroy(sfArray);
    }


Спасибо!

Добавлено через 4 минуты и 36 секунд
Привожу код функции
Код

void CDrebedengiView::OnDownloadComplete()
{
    IHTMLDocument2 *document; // Declared earlier in the code
    IDispatch *pDisp = GetHtmlDocument();
    ASSERT(pDisp);
    pDisp->QueryInterface( __uuidof(IHTMLDocument2), (void**)&document);
    ASSERT( SUCCEEDED(document) );
    pDisp->Release();
    HRESULT hresult = S_OK;
    VARIANT *param;
    SAFEARRAY *sfArray;
    BSTR bstr = SysAllocString(OLESTR("<HTML>Written by IHTMLDocument2::write().</HTML>"));

    // Creates a new one-dimensional array
    sfArray = SafeArrayCreateVector(VT_VARIANT, 0, 1);
    
    if (sfArray == NULL || document == NULL) {
        return;
    }

    hresult = SafeArrayAccessData(sfArray,(LPVOID*) & param);
    param->vt = VT_BSTR;
    param->bstrVal = bstr;
    hresult = SafeArrayUnaccessData(sfArray);
    hresult = document->writeln(sfArray);

    SysFreeString(bstr);
    if (sfArray != NULL) {
        SafeArrayDestroy(sfArray);
    }

    CHtmlView::OnDownloadComplete();
}



--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
The Thing
Дата 18.3.2008, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: нет
Всего: 3



Я нашел несколько примеров, где загружается именно таким способом...
Но у меня не работает. Окно пустое, и нажав любую клавишу мыши, глухой звук


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
The Thing
Дата 18.3.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: нет
Всего: 3



Код вставлял в эту функцию - не работало!

void CDrebedengiView::OnDownloadComplete()

Вставил в OnInitialUpdate() - заработало :/

Получается что после того как страница загружена ее изменить нельзя?


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
The Thing
Дата 18.3.2008, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: нет
Всего: 3



Ничего не пойму!
А этот код грузит только первый символ
Все дело в строке, почему через SysAllocString все работает 
А через BSTR str = L"Test"; нет?
Код

HRESULT CBasePage::Initial(PID pid)
{
    HRESULT hr;
    CString strHtml = FactoryPage(pid);
    hr = LoadHtml( strHtml );
    return hr;
}

//Загружаем HTML код
HRESULT CBasePage::LoadHtml(LPCTSTR strHtml)
{
    CComPtr<IDispatch> pDocDispatch = GetHtmlDocument();
    CComQIPtr<IHTMLDocument2,&IID_IHTMLDocument2> pHtmlDocument2(pDocDispatch);

    HRESULT hr;
    SAFEARRAY* psa = SafeArrayCreateVector(VT_VARIANT, 0, 1);

    if( NULL != psa )
    {
        VARIANT *param;
        BSTR bsData = (BSTR)strHtml; //SysAllocString(OLESTR)"Written by IHTMLDocument2::write()."));
        hr =  SafeArrayAccessData(psa, (LPVOID*)&param);

        if( SUCCEEDED( hr ) )
        {
            CComVariant vName("HistroyName");

            hr = pHtmlDocument2->open(L"text/html",vName,CComVariant(),CComVariant(),NULL);

            if( SUCCEEDED(hr) )
            {
                param->vt = VT_BSTR;
                param->bstrVal = (BSTR)bsData;

                hr = pHtmlDocument2->write(psa);

                hr = pHtmlDocument2->close();
            }
        }

        if (psa != NULL) {
            SafeArrayDestroy(psa);
        }
    }

    return hr;
}


Добавлено через 45 секунд
Уже и в динамической памяти строкусоздавал.. передавал - та же фигня


--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
The Thing
Дата 18.3.2008, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 286
Регистрация: 6.9.2004

Репутация: нет
Всего: 3



Решил проблему так:
Что делает SysAllocString так и не выяснил. По названию, конечно догадываюсь.. но все даки.

Код

CString strHtml
...
BSTR bsData = SysAllocString( strHtml );
hr = pHtmlDocument2->write(psa);
SysFreeString(bsData);



--------------------
Правильность работы программы зависит от двух велечин.
В нужном месте должны стоять нолик и еденичка.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0821 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.