Example #1
0
            // 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);
                }
            }