PDA

Просмотр полной версии : Помогите разобраться в COM II



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


obj_by_idisp.method

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

http://support.microsoft.com/default.aspx?scid=kb;en-us;249232
Там через smart указатель IHTMLDocument2 получаем этот интерфейс.
Теперь получив один интерфейс я хотел бы получить нужный мне IDispatch, но к сожалению у меня не вышло. Одним из моих последних варианто было.


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


obj_by_idisp.close

вылетает ошибка.
Пожалуйста подскажите где я ошибся.

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

Eugie
11.10.2005, 00:49
Попробуй так:


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