#javascript #windows #com #mobile #activex
#javascript #Windows #com #Мобильный #activex
Вопрос:
У меня есть приложение hyrid-типа (web и forms). Это приложение .net compact framework. В одной из форм у меня есть элемент управления WebBrowser.
Я хочу обмениваться данными между элементом управления WebBrowser и формой, в которой размещен / содержится элемент управления WebBrowser.
Для этого я планирую создать объект Activex (COM) на C , скомпилированный для устройства Windows Mobile.
Я планирую использовать JavaScript для создания экземпляра элемента управления ActiveX на веб-странице, которая отображается в элементе управления WebBrowser.
Как я могу получить ссылку на этот элемент управления ActiveX, который я затем могу отправить в форму?
Моя цель — отправить ссылку на экземпляр элемента управления ActiveX в форму Windows mobile, которая содержит элемент управления WebBrowser, чтобы и веб-страница, и форма могли использовать / получать доступ к одному и тому же экземпляру элемента управления ActiveX.
Я создал способ отправки строк из элемента управления ActiveX в форму. Есть ли способ преобразовать ссылку на элемент управления ActiveX в строку, затем передать строку в форму и повторно создать ссылку на экземпляр объекта на стороне формы?
Я надеюсь, что это имеет смысл.
Ответ №1:
Вы можете получить ссылку 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(amp;m_htmlDocDisp);
CComQIPtr<IHTMLDocument2> doc(m_htmlDocDisp);
assert(doc);
doc->get_parentWindow(amp;m_htmlWin);
assert(m_htmlWin);
m_htmlWindDisp = m_htmlWin;
assert(m_htmlWin);
Получив это, вы можете использовать методы IDispatch либо для запроса значения свойства объекта window, либо для установки значения такого свойства. Например, если вы создаете объект IDispatch, который предоставляет методы и свойства, затем вы используете объект m_htmlWindDisp для вызова с помощью PROPERTYPUTREF этого объекта как «foo», тогда вы можете получить доступ к этому объекту из javascript с помощью «window.foo». Альтернативно, используя Invoke с PROPERTYGET, вы можете получить дескриптор IDispatch для объекта, который вы установили в window, например «window.foo = someFooBaredObject»
Надеюсь, это имеет смысл.