// constructor public WebBrowserSiteEx(WebBrowserEx host) : base(host) { // This code causes problems on XP if (host.Version.Major >= 9) { _host = host; // get the CCW object for this _unkOuter = Marshal.GetIUnknownForObject(this); Marshal.AddRef(_unkOuter); try { // aggregate the CCW object with the helper Inner object _inner = new Inner(this); _unkInnerAggregated = Marshal.CreateAggregatedObject(_unkOuter, _inner); // obtain private WebBrowserSite COM interfaces _baseIDocHostUIHandler = (NativeMethods.IDocHostUIHandler)Marshal.GetTypedObjectForIUnknown(_unkInnerAggregated, typeof(NativeMethods.IDocHostUIHandler)); } finally { Marshal.Release(_unkOuter); } } }
void IDisposable.Dispose() { base.Dispose(); _baseIDocHostUIHandler = null; if (_unkInnerAggregated != IntPtr.Zero) { Marshal.Release(_unkInnerAggregated); _unkInnerAggregated = IntPtr.Zero; } if (_unkOuter != IntPtr.Zero) { Marshal.Release(_unkOuter); _unkOuter = IntPtr.Zero; } }
// constructor public ImprovedWebBrowserSite(WebBrowser host) : base(host) { _host = (ImprovedWebBrowser)host; // get the CCW object for this _unkOuter = Marshal.GetIUnknownForObject(this); Marshal.AddRef(_unkOuter); try { // aggregate the CCW object with the helper Inner object _inner = new Inner(this); _unkInnerAggregated = Marshal.CreateAggregatedObject(_unkOuter, _inner); // obtain private WebBrowserSite COM interfaces _baseIDocHostUIHandler = (NativeMethods.IDocHostUIHandler)Marshal.GetTypedObjectForIUnknown(_unkInnerAggregated, typeof(NativeMethods.IDocHostUIHandler)); } finally { Marshal.Release(_unkOuter); } }