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

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Помогите разобраться в COM II

Eugie » 11 окт 2005, 00:49

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

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

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

Chizh » 07 окт 2005, 17:53

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

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

ivs4 » 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
вылетает ошибка.
Пожалуйста подскажите где я ошибся.

Вернуться к началу