Как получить указатель IHTMLELEMENT на тег <Объект> Установка элемента управления ActiveX

StackOverflow https://stackoverflow.com/questions/4103315

Вопрос

У меня есть управление ActiveX, сгенерированным Fightbroke Framework (http://firebroch.org). Мне нужно получить ссылку наu003Cobject> Тег на странице, которая проходит плагин от C ++.

Если бы я использовал NPAPI, я бы использовал константу NPNVPLUGINELEMENTNEMENTNPOBJECT с NPN_GetValue.

Итак, чтобы убедиться, что я понял, скажем, у меня есть следующее на странице:

u003Cobject id="testPlugin" type="application/x-someplugin" width="100%" height="100%">u003C/object>

Я хочу получить ссылку на плагин, как будто я бы, если бы я использовал Document.getelementbyId («TestPlugin»), за исключением в пределах кода C ++ управления ActiveX, который вставлен для этого mimetype.

Обратите внимание, что передача идентификатора в качествеu003Cparam> Для меня не очень хороший вариант, но если есть способ получить идентификатор идентификатора изнутри управления ActiveX, который может работать.

редактировать: Я рассматриваю возможность использования GetElementsyTagname и пытаясь найти его через DOM, но было бы трудно сказать разницу между двумя экземплярами того же плагина.

Это было полезно?

Решение

Благодаря упущению пожарной одежды jtojanen из Финляндии, мы наконец у нас есть решение.

Первое, что объект com должен быть зарегистрированным как «квартира», а не «сингл» (в реестре). В противном случае это не сработает; Кажется, ошибка в ком.

Тогда где-нибудь после SetClientite вызывается, вы можете сделать следующее:

CComQIPtr<IOleControlSite> site(m_spClientSite);
CComPtr<IDispatch> dispatch;
site->GetExtendedControl(&dispatch);
CComQIPtr<IHTMLElement2> htmlElement = dispatch;

Надеюсь, это экономит кому-то некоторое время; Это взяло меня почти 2 года, чтобы найти кого-то, кто мог бы ответить на это для меня.

Объект в HTMLELELEMENT будетu003Cobject> тег, который обертывает ваш плагин; Итак, если вы наверните интерфейс для любого из ваших интерфейсов, он должен преуспеть, но на самом деле он может не быть буквально быть вашим объектом, он, вероятно, будет обертком для вашего объекта.

Другие советы

В C #:

    public int SetSite(object site)
    {
        if (site != null)
        {
            var oleControl = (IOleControlSite)site;
            object oHtmlElement;
            oleControl.GetExtendedControl(out oHtmlElement);
            var htmlElement = (IHTMLElement2)oHtmlElement;
            ...
        }
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top