Как получить ссылку на объект (COM) в JavaScript, который может быть передан за пределы браузера - PullRequest
0 голосов
/ 02 октября 2011

У меня есть приложение типа Hyrid (веб и формы).Это компактное приложение .net.На одной из форм у меня есть элемент управления WebBrowser.

Я хочу установить связь между элементом управления WebBrowser и формой, в которой находится / содержит элемент управления WebBrowser.

Для этого я планирую создать объект Activex (COM) в C ++, скомпилированный для устройства Windows Mobile.

Я планирую использовать JavaScript для создания экземпляра элемента управления ActiveX на веб-странице, отображаемой в элементе управления WebBrowser.

Как получить ссылку на этот элемент управления ActiveX, которую я могузатем отправить в форму?


Моя цель - отправить ссылку на экземпляр элемента управления ActiveX в форму Windows Mobile, содержащую элемент управления WebBrowser, чтобы веб-страница и форма могли использовать / получить доступ ктот же экземпляр элемента управления ActiveX.

Я создал способ отправки строк из элемента управления ActiveX в форму.Есть ли способ преобразовать ссылку элемента управления ActiveX в строку, а затем передать строку в форму и заново создать ссылку на экземпляр объекта на стороне формы?

Надеюсь, это имеет смысл.

1 Ответ

0 голосов
/ 03 октября 2011

Вы можете получить ссылку IDispatch на окно, используя что-то вроде этого:

CComPtr<IWebBrowser2> m_webBrowser(/* create, assign, whatever to get the pointer */
CComQIPtr<IHTMLWindow2> m_htmlWin;
CComPtr<IDispatch> m_htmlDocDisp;
CComQIPtr<IDispatch> m_htmlWindDisp;

m_webBrowser->get_Document(&m_htmlDocDisp);
CComQIPtr<IHTMLDocument2> doc(m_htmlDocDisp);
assert(doc);
doc->get_parentWindow(&m_htmlWin);
assert(m_htmlWin);

m_htmlWindDisp = m_htmlWin;
assert(m_htmlWin);

Как только вы это сделаете, вы можете использовать методы IDispatch, чтобы либо запросить значение свойства у объекта окна, либо вы можете установить значение такого свойства. Например, если вы создаете объект IDispatch, который предоставляет методы и свойства, то вы используете объект m_htmlWindDisp, чтобы вызвать с PROPERTYPUTREF этот объект как «foo», тогда вы можете получить доступ к этому объекту из javascript, используя «window.foo». Кроме того, используя Invoke с PROPERTYGET, вы можете получить дескриптор IDispatch для объекта, который вы устанавливаете в окне, например "window.foo = someFooBaredObject"

Надеюсь, что это имеет смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...