Wie man einen IHTMLElement Zeiger auf den
-
29-09-2019 - |
Frage
Ich habe ein ActiveX-Steuerelement, die durch den firebreath Rahmen (http://firebreath.org). Ich brauche einen Verweis auf den
Wenn ich NPAPI verwendet haben, würde ich die NPNVPluginElementNPObject konstant mit NPN_GetValue verwenden.
so sicherstellen, dass ich klar bin zu sein, sagen, ich habe folgend auf der Seite:
Ich mag einen Verweis auf das Plugin bekommen, wie ich würde, wenn ich document.getElementById verwendet ( „Testplugin“), mit Ausnahme von innerhalb des C ++ Code des ActiveX-Steuerelement, das für diesen MIME-Typen eingeführt wird.
Bitte beachten Sie, dass das Bestehen der ID in als ist keine gute Option für mich, aber wenn es eine Möglichkeit, die ID aus dem Innern des ActiveX-Steuerelement zu erhalten, die arbeiten kann.
bearbeiten. Ich erwäge mit getElementsByTagName und versuchen, es durch das DOM zu finden, aber es wäre schwierig, den Unterschied zwischen zwei Instanzen des gleichen Plugin zu sagen
Lösung
Dank firebreath Beitrag jtojanen aus Finnland haben wir endlich eine Lösung.
Die erste Sache ist, dass das COM-Objekt muss als "Wohnung" registriert wird, nicht "Single" (in der Registrierung). Andernfalls wird dies nicht funktionieren; scheint in COM ein Bug zu sein.
Dann überall nach SetClientSite aufgerufen wird, können Sie die folgenden Schritte ausführen:
CComQIPtr<IOleControlSite> site(m_spClientSite);
CComPtr<IDispatch> dispatch;
site->GetExtendedControl(&dispatch);
CComQIPtr<IHTMLElement2> htmlElement = dispatch;
Hope spart jemand einige Zeit; es hat mich fast 2 Jahre gedauert, jemanden zu finden, das für mich beantworten konnte.
Das Objekt in Htmlelement wird das
Andere Tipps
In C #:
public int SetSite(object site)
{
if (site != null)
{
var oleControl = (IOleControlSite)site;
object oHtmlElement;
oleControl.GetExtendedControl(out oHtmlElement);
var htmlElement = (IHTMLElement2)oHtmlElement;
...
}
}