Страница 1 из 1

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

Добавлено: 06 окт 2005, 18:40
ivs4
Всем привет. Продолжаю бороздить 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
вылетает ошибка.
Пожалуйста подскажите где я ошибся.

Добавлено: 07 окт 2005, 17:53
Chizh
Я думаю так - если бы интерфейс поддерживался, ты бы его получил. Очевидно что не поддерживается.

Добавлено: 11 окт 2005, 00:49
Eugie
Попробуй так:

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

 
  CComPtr<IDispatch> disp;
  spDoc->QueryInterface(IID_IDispatch, &disp);