![]() |
|
|
![]()
|
|
| sax0n |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 7.10.2006 Репутация: нет Всего: нет |
Привет всем.
У меня возникла одна проблема. Я надеюсь, что найдется человек, который сталкивался с ней уже, т.к. я перекопал весь код, но ничего не нашел ( программа подключается к событиям (ConnectionPoint — DWebBrowserEvents2 — Advise) ИЕ при создании окна. при удалении делает UnAdvise — аргумент проавильный. если так сделать один раз (запустить, поделать что-то с окнами ИЕ, удалить), то все нормально. Проблема возникает вот когда: запускаю прог-у, открываю 5 ИЕ, удаляю прог-у. не закрываю окна ИЕ повторяю это до 20-25 окон ИЕ — то есть еще раза 3-4. После минуты простое начинают появляться ошибки Винды вида "отправить отчет" в модуле ИЕ. Скорее всего ошибка в функции "очистки" ИЕ от моего Sink, т.к. если не делать unadvise, а просто закрывать окна, все работает. Ниже код. Также интересует, какие интерфейсы нужно очищать и как, потому что с разными комбинациями очистки прог-а по-разному себя ведет { CoInitialize(NULL); IWebBrowser2 * PWB; IDispatch * iDisp; LPCONNECTIONPOINT lpCP; LPCONNECTIONPOINTCONTAINER lpCPC; SHDocVw::IShellWindowsPtr lpShell = NULL; HRESULT rez; long lCount = 0; BSTR bstrPropName; VARIANT varPropValue; int dwConnection = 0; if(IEVersionIsNew_6()) { rez = CoCreateInstance(CLSID_ShellWindows, NULL, CLSCTX_INPROC_SERVER,IID_IShellWindows,(void**)&lpShell); } else { rez = lpShell.CreateInstance(__uuidof(ShellWindows)); } if(SUCCEEDED(rez)) { lpShell->get_Count(&lCount); for(long i = 0; i < lCount; i++) { lpCP = NULL; lpCPC = NULL; PWB = NULL; iDisp = NULL; dwConnection = 0; VARIANT v; v.vt=VT_I4; v.lVal=i; iDisp = lpShell->Item(v); if(iDisp != NULL) { if(SUCCEEDED(iDisp->QueryInterface(IID_IWebBrowser2,(void**)&PWB))) { if(PWB != NULL) { bstrPropName = SysAllocString (C_COOKIENAME); varPropValue; VariantInit (&varPropValue); if(SUCCEEDED(PWB->GetProperty(bstrPropName, &varPropValue))) { dwConnection = varPropValue.intVal; if(dwConnection < 0) { /*iDisp->Release(); iDisp = NULL; PWB->Release(); PWB = NULL;*/ continue; } BSTR bstrPropName2 = SysAllocString (C_COOKIENAME); VARIANT varPropValue2; VariantInit (&varPropValue2); V_VT (&varPropValue2) = VT_INT; V_INT (&varPropValue2) = -1; PWB->PutProperty (bstrPropName2, varPropValue2); SysFreeString (bstrPropName2); VariantClear (&varPropValue2); if(SUCCEEDED(PWB->QueryInterface(IID_IConnectionPointContainer,(void**)&lpCPC))) { if(SUCCEEDED(lpCPC->FindConnectionPoint(DIID_DWebBrowserEvents2,&lpCP))) { if(SUCCEEDED(lpCP->Unadvise(dwConnection))) { if(SUCCEEDED(lpCP->Release())) { if(SUCCEEDED(lpCPC->Release())) { /*iDisp->Release(); iDisp = NULL; PWB->Release(); PWB = NULL;*/ } } } } } } SysFreeString (bstrPropName); VariantClear (&varPropValue); } } } } } /*lpShell->Release(); lpShell = NULL; CoUninitialize();*/ } |
|||
|
||||
| Yama |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 167 Регистрация: 2.8.2006 Репутация: нет Всего: 2 |
sax0n,
как программа подключается к этим событиям? что значит удаляешь прогу? End process в Диспетчере задач?
это поподробнее опиши, плз, т.к. я не знаю, от чего ты очищаешь ИЕ
а какие интерфейсы ты используешь? --------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию. |
||||||
|
|||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |