Ich gebe zu, ich weiß genug über COM und IE-Architektur nur um gefährlich zu sein. Ich habe eine funktionierende C# .NET ActiveX-Steuerelement wie folgt aus:.NET ActiveX-Komponente im IE - Wie Browser Referenz
using System;
using System.Runtime.InteropServices;
using BrowseUI;
using mshtml;
using SHDocVw;
using Microsoft.Win32;
namespace CTI
{
public interface CTIActiveXInterface
{
[DispId(1)]
string GetMsg();
}
[ComVisible(true), ClassInterface(ClassInterfaceType.AutoDual)]
public class CTIActiveX : CTIActiveXInterface
{
/*** Where can I get a reference to SHDocVw.WebBrowser? *****/
SHDocVw.WebBrowser browser;
public string GetMsg()
{
return "foo";
}
}
}
ich registriert und eine Typbibliothek mit regasm erstellt:
regasm CTIActiveX.dll /tlb:CTIActiveXNet.dll /codebase
Und kann diese erfolgreich in Javascript instanziiert:
var CTIAX = new ActiveXObject("CTI.CTIActiveX");
alert(CTIAX.GetMsg());
Wie kann ich in CTIActiveX einen Verweis auf die Client-Site (Browser-Fenster) erhalten? Ich habe dies in einem BHO getan, indem ich IObjectWithSite implementiert habe, aber ich denke nicht, dass dies der richtige Ansatz für ein ActiveX-Steuerelement ist. Wenn ich irgendeine Schnittstelle (ich meine COM-Schnittstelle wie IObjectWithSite) auf CTIActiveX implementieren, wenn ich versuche, in Javascript zu instanziieren, bekomme ich einen Fehler, dass das Objekt Automatisierung nicht unterstützt.
Gut Antwort, die mir bei einem anderen Problem hilft; aber es ist nicht genau was ich suche. IHTMLDocument2.parentWindow gibt ein mshtml.IHTMLWindow2 zurück, nicht SHDocVw.WebBrowser. Ich bin auf der Suche nach SHDocVw.WebBrowser, so kann ich auf die Methoden GetProperty und PutProperty zu kommunizieren mit einem BHO. –
Um das klarzustellen, funktioniert das Beispiel in der Frage auch. ComVisible (true) scheint nicht erforderlich zu sein, wenn die implementierende Klasse ComVisible wie in meinem Beispiel angibt. Es bricht nur, wenn ich explizit eine COM-Schnittstelle wie IObjectWithSite implementieren. –