Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: IWebBrowser2 в отдельных процессах  (Прочитано 5423 раз)
0 Пользователей и 1 Гость смотрят эту тему.
BlackStar
Постоялец

ua
Offline Offline
Пол: Мужской

WWW
« : 10-03-2011 14:08 » 

Приветствую!

У меня появилась проблема с запуском эксплорера как COM-объекта в отдельных процессах.
Я создаю в своей программе несколько потоков, в каждом из которых создается COM-объект IWebBrowser2 самым обычным способом:

Код:
CoInitialize(NULL);

CComPtr<IWebBrowser2> webBrowser;

CoGetClassObject(CLSID_InternetExplorer,
                    CLSCTX_LOCAL_SERVER,
                    NULL,
                    IID_IWebBrowser2,
                    (LPVOID*)&webBrowser);

...

CoUninitialize();


Но оказалось, что все окна эксплорера запускаются в одном процессе IEXPLORER.EXE, а мне нужно, чтобы каждый новый браузер запускался в отдельном процессе. Тем более, что, когда я запускаю несколько эксплореров вручную (жмакая мышкой на ярлыке), то все они работают в отдельных процессах.
Подскажите мне, пожалуйста, как можно добиться того же эффекта с помощью CoCreateInstance(), чтобы заполучить несколько интерфейсов IWebBrowser2 от браузеров, которые работают каждый в своем процессе?

Получается, что после создания нового экземпляра iexplore.exe, каждый последующий вызов CoCreateInstance() создает новое окно эксплорера в том же процессе (равносильно Файл->Новое окно), а мне нужно, чтобы при каждом вызове запускался новый экземпляр процесса iexplore.exe  Как это сделать?
« Последнее редактирование: 10-03-2011 14:22 от Вад » Записан

Программирование на заказ   C/C++, Delphi, PHP, javascript
zubr
Гость
« Ответ #1 : 10-03-2011 19:10 » 

Попробуй вместо CoInitialize(NULL); сделать CoInitializeEx(NULL, COINIT_MULTITHREADED); и не для каждого потока, а для всего приложения.
Записан
BlackStar
Постоялец

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 10-03-2011 22:00 » 

Уже по-всякому попробовал - не получается. Надо так понимать, что эксплорер так устроен, что объекты создаются в одном процессе, при чем, даже если вызывать CoCreateInstance() в разных приложениях.

Тему можно закрывать.
Записан

Программирование на заказ   C/C++, Delphi, PHP, javascript
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines