Поиск:

Ответ в темуСоздание новой темы Создание опроса
> COM Explorer'а, События 
:(
    Опции темы
Sheff
Дата 22.12.2005, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

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



Народ проблема с COM'ом IE. Делаю плагин для IE. Всё вроде пашет, плагин заружается, я использую для отлавливания событий браузера connection point DWebBrowserEvents2, там я ловлю функцию BeforeNavigate2. Всё получается, она вызывается в случае перехода по ссылке. Её прототип:
Код

void BeforeNavigate2(IDispatch *pDisp,VARIANT *&url,VARIANT *&Flags,VARIANT *&TargetFrameName,VARIANT *&PostData,VARIANT *&Headers,VARIANT_BOOL *&Cancel); 

Все эти параметры я получаю, всё корректно, кроме PostData, а он то мне больше всего нужен, вместо корректных данных в PostData лежит:
VARIANT типа VT_VARIANT | VT_BYREF, т.е надо смотреть поле pvarVal в VARIANT, смотрим туда и что видим: тип VARIANT'а на который указывает pvarVal: VT_VARIANT | VT_BYREF, а в MSDN'е сказано:
Цитата

VT_VARIANT | VT_BYREF: A pointer to another VARIANTARG is passed in pvarVal. This referenced VARIANTARG, pvarVal, cannot be another VT_VARIANT|VT_BYREF.

не может того быть говорит MSDN. Что же делать, люди ? Кто-нибудь знает в чём дело ? Да, запрос естественно я делаю при помощи формы, методом POST, так что PostData не может быть пустым.

Добавлено @ 01:43
А, ещё обнаружена особенность, если запрос не POST, то pvarVal имеет тип VT_EMPTY, т.е всё Ok как бы.


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
JoyEx
Дата 22.12.2005, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: 1
Всего: 12



Вот
Цитата(MSDN)
The post data specified by PostData is passed as a SAFEARRAY structure.



--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
Sheff
Дата 22.12.2005, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

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



Проверял, там ничего нет, более того, тип стоит не VT_SAFEARRAY, а VT_VARIANT|VT_BYREF, значит по любому надо смотреть поле pvarVal. Это даже не важно, PostData вообще не является правильным Variant, я там все поля просмотрел, один мусор =(


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
Sheff
Дата 22.12.2005, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

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



Вопрос закрыт, надо было так:
Код

SAFEARRAY *sa = (SAFEARRAY*)(pdispparams->rgvarg[2].pvarVal->pvarVal->parray);



--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
SeregaLBN
Дата 30.12.2005, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.10.2003
Где: Киев

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



Я так достукивался:
Код

void CMyClass::OnBeforeNavigate2Explorer(LPDISPATCH pDisp, VARIANT FAR* URL, VARIANT FAR* Flags, VARIANT FAR* TargetFrameName, VARIANT FAR* PostData, VARIANT FAR* Headers, BOOL FAR* Cancel) 
{
      if (PostData && PostData->pvarVal) {
         VARIANT *pVar = PostData->pvarVal;
         if ((pVar->vt == (VT_ARRAY | VT_UI1)) &&
              pVar->parray)
         {
            // ...
            // указатель на данные в pVar->parray->pvData
            // размер этих ланных - в pVar->parray->rgsabound[0].cElements
         }
      }
}

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


 




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


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

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