Помогите разобраться в COM II

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Eugie, Romeo, Hawk

Ответить
ivs4
Сообщения: 4
Зарегистрирован: 15 сен 2005, 21:37

06 окт 2005, 18:40

Всем привет. Продолжаю бороздить COM и иже с ним. Недавно вот задался вопросом стыковки передачи объета OLE из *.exe(vc++) в VBS.
Оказывается все завязано на интерфейс IDispatch объекта. Если VBS получает указатель на данный интерфейс, то далее им можно пользоваться применяя следующий синтаксис.

Код: Выделить всё

obj_by_idisp.method
Затем я стал раскручивать данную возможность. Для примера создавал в exe внутренний класс, создавал его объект здесь же и передавал его IDispatch* в VBS и т.д.
Но недавно сложилась такая ситуация. Мне было необходимо достать объект Internet Explorer Document по HWND. Знакомый подкинул полезную статейку
Там через smart указатель IHTMLDocument2 получаем этот интерфейс.
Теперь получив один интерфейс я хотел бы получить нужный мне IDispatch, но к сожалению у меня не вышло. Одним из моих последних варианто было.

Код: Выделить всё

CComPtr<IHTMLDocument2> spDoc;
...
IDispatch *disp4html;
hres=((IUnknown*)(spDoc.p))->QueryInterface(IID_IDispatch,(void**)&disp4html);
На все мои попытки на строке VBS

Код: Выделить всё

obj_by_idisp.close
вылетает ошибка.
Пожалуйста подскажите где я ошибся.
Chizh
Сообщения: 7
Зарегистрирован: 03 окт 2005, 16:47

07 окт 2005, 17:53

Я думаю так - если бы интерфейс поддерживался, ты бы его получил. Очевидно что не поддерживается.
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

11 окт 2005, 00:49

Попробуй так:

Код: Выделить всё

 
  CComPtr<IDispatch> disp;
  spDoc->QueryInterface(IID_IDispatch, &disp);
Ответить