Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
Иван Петрович 1

Получение кода страницы в потоке используя CppWebBrowser

13.01.2012, 16:21. Показов 3431. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема состоит в том, что во время выполнения кода:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
AnsiString url_site = "http://www.google.ru";
TVariant x = url_site;  
Form1->CppWebBrowser1->Navigate2(&x, NULL, NULL, NULL, NULL);
while (Form1->CppWebBrowser1->ReadyState != 4)
{
 Application->ProcessMessages();;
}
TComInterface<IHTMLDocument2> pHTMLDocument;
TComInterface<IHTMLElement> pEl;
 
if (S_OK != Form1->CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*) &pHTMLDocument)) return; 
 
 if (S_OK != pHTMLDocument->get_body(&pEl)) return; 
 
       WideString wHtmlCode;
       pEl->get_innerHTML(&wHtmlCode);
       Form1->Memo2->Text = wHtmlCode;
в потоке выходит ошибка: raised exception class eaccessviolation with message 'access violation at address in module mshtml.dll
страница загружается, но исходный код не выводится в memo.

при выполнении данного кода не в потоке все работает правильно и корректно.
Подскажите пожалуйста решение проблемы. В поисковиках рылся уже 2 дня и не нашел ничего конкретного по решению данной ошибки.

Добавлено через 16 часов 38 минут
Вопрос решился:
Ссылка
 Комментарий модератора 
Правила
п.3.7. Запрещено публиковать ссылки на другие форумы.
Хотите сделать доброе дело - скопируйте и выложите сюда решение.


Добавлено через 45 минут
Но если выполение данного кода происходит циклично (т.е. загружается несколько страниц по порядку),
исходный код первой страницы загружается нормально, а на второй страницы выводится сообщение:
"_ASSERTE intf != 0 @ c:\program files..........vcl\utilcls.h/2912 Press Y,N,C "
и выводит курсор на строчку: pEl->get_innerHTML(&wHtmlCode);
как это решить подскажите?
чем дальше тем круче((

Добавлено через 5 часов 17 минут
Итоговая версия, вроде работает как мне нужно и без ошибок. насчет правильности и корректности не уверен - приоритет на результат ставлю:
файл unit2.h:
Код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
class Thread : public TThread
{            
private:
protected:
 
        void __fastcall Execute();
public:
        __fastcall Thread(bool CreateSuspended);
 
         void __fastcall Thread::AddMemo();
};
 
 
Файл Unit2.cpp:
Код:
 
__fastcall Thread::Thread(bool CreateSuspended)
        : TThread(CreateSuspended)
{
 
}
 
 
void __fastcall Thread::Execute()
{
 
for (int i = 0; i < Form1->Memo1->Lines->Count; i++)
          {
          AnsiString url_site = Form1->Memo1->Lines->Strings[i];
          TVariant x = url_site;  // сайт
          Form1->CppWebBrowser1->Navigate2(&x, NULL, NULL, NULL, NULL);
          while (Form1->CppWebBrowser1->ReadyState != 4)
                  {
                  
                  Sleep(50);
                  } // ждет пока полностью не загрузится страница
 
          Synchronize(&AddMemo);
          
         .........................................................
         ..........................................................
         Form1->Memo3->Clear();
         if(Terminated) break;// проверка на закрытие потока
         }
return;
}
 
void __fastcall Thread::AddMemo()
{
 TComInterface<IHTMLDocument2> pHTMLDocument;
 TComInterface<IHTMLElement> pEl;
 
 if (S_OK != Form1->CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*) &pHTMLDocument)) return; // запрос интерфейс документа
 if (S_OK != pHTMLDocument->get_body(&pEl)) return; // тело документа
 
 WideString wHtmlCode;
 pEl->get_innerHTML(&wHtmlCode);
 
 Form1->Memo3->Text = wHtmlCode;
 
 return;
}
Компилировал в Builder 6
Если есть какие нибудь еще предложения по поводу корректности кода прошу поделиться.

 Комментарий модератора 
Есть предложение использовать тег кода при вставке кода .
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.01.2012, 16:21
Ответы с готовыми решениями:

Получение кода страницы
Приложение закрывается после нажатия на кнопку почему? public class MainActivity extends Activity { EditText editText; String s...

Получение HTML кода страницы
Добрый день. Написал программу: Const INTERNET_OPEN_TYPE_PRECONFIG = 0 Const INTERNET_OPEN_TYPE_DIRECT = 1 Const...

Получение исходного кода страницы
При получении исходного кода нету половины результата, пришел к выводу что данные подгружаются JavaScript, с помощью какой библиотеки или...

1
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
14.01.2012, 11:08
Из Execute() ни к чему напрямую лучше не обращаться, даже для чтения. Тыщу раз может отработать без ошибок, а на тыща первый вылетит access violation... а может и наоборот, как повезет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
class Thread : public TThread {            
private:
        int memo_lines_count, iter;
        
        void __fastcall get_memo_lines_count(void);
        void __fastcall get_site_url_and_navigate(void);
        void __fastcall add_memo(void);
        void __fastcall clear_memo(void);
protected: 
        void __fastcall Execute();
public:
        TVariant site_url;       
         
        __fastcall Thread(bool CreateSuspended);
};
////////////////////////////////////////////////////////////////////////////////
__fastcall Thread::Thread(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
//////////////////////////////////////////////////////////////////////////////// 
void __fastcall Thread::get_memo_lines_count(void) {
    memo_lines_count = Form1->Memo1->Lines->Count;
}
////////////////////////////////////////////////////////////////////////////////
void __fastcall Thread::get_site_url_and_navigate(void) {
    site_url = Form1->Memo1->Lines->Strings[iter];
    Form1->CppWebBrowser1->Navigate2(&site_url, NULL, NULL, NULL, NULL);
    while (Form1->CppWebBrowser1->ReadyState != 4){
        Sleep(50);
    } // ждет пока полностью не загрузится страница
}
////////////////////////////////////////////////////////////////////////////////
void __fastcall Thread::add_memo(void) {
    TComInterface<IHTMLDocument2> pHTMLDocument;
    TComInterface<IHTMLElement> pEl;
     
    if (S_OK != Form1->CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*) &pHTMLDocument)) return; // запрос интерфейс документа
    if (S_OK != pHTMLDocument->get_body(&pEl)) return; // тело документа
     
    WideString wHtmlCode;
    pEl->get_innerHTML(&wHtmlCode);
     
    Form1->Memo3->Text = wHtmlCode;
}
////////////////////////////////////////////////////////////////////////////////
void __fastcall Thread::clear_memo(void) {
    Form1->Memo3->Clear();
}
////////////////////////////////////////////////////////////////////////////////
void __fastcall Thread::Execute()
{
    Synchronize(&get_memo_lines_count);
    for (iter = 0; !Terminated && iter < memo_lines_count; iter++) {
        Synchronize(&get_site_url_and_navigate);
        Synchronize(&add_memo);
        // ...
        Synchronize(&clear_memo);       
    }
}
////////////////////////////////////////////////////////////////////////////////
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.01.2012, 11:08
Помогаю со студенческими работами здесь

Tchromium-Получение кода с страницы
Всем доброго времени суток, есть одна проблема при получении кода с страницы выбивает ошибку, ломаю голову над этим но не как не решу, кто...

Получение кода web страницы
Всем доброго времени суток... Задача заключается в следующем ... : есть сайт, например...

Получение исходного кода страницы
есть страница и надо получить ее исходный код. Раньше (примерно неделю назад) работало все как по маслу но теперь failed to open stream:...

Получение HTML-кода страницы
Всем доброго времени суток. У меня опять проблема.) Дело вот в чем. Мне надо получить HTML код страницы. private void...

Получение html кода страницы
Помогите разобраться с получением html кода интернет страницы в приложении android, для последующего извлечения из неё информации.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru