public override void Dispose() { _cachedFrame?.Dispose(); _cachedFrame = null; if (_IOleClientSite != null) { Marshal.ReleaseComObject(_IOleClientSite); _IOleClientSite = null; } if (_IOleInPlaceSite != null) { Marshal.ReleaseComObject(_IOleInPlaceSite); _IOleInPlaceSite = null; } base.Dispose(); }
public int /* IOleInPlaceSite:: */ GetWindowContext([Out] out IntPtr /* IOleInPlaceFrame */ ppFrame, [Out] out IntPtr /* IOleInPlaceUIWindow */ ppDoc, [Out] out IntPtr /* COMRECT */ lprcPosRect, [Out] out IntPtr /* COMRECT */ lprcClipRect, [In] IntPtr /* tagOIFI */ lpFrameInfo) { _logger.Log(LogLevel.Trace, "IOleInPlaceSite::GetWindowContext() called"); int hr = _IOleInPlaceSite.GetWindowContext(out ppFrame, out ppDoc, out lprcPosRect, out lprcClipRect, lpFrameInfo); if (hr >= 0) { // call succeeded, so wrap the ppFrame with our own object so that we can control all host owned COM references _cachedFrame?.Dispose(); _cachedFrame = null; _cachedFrame = new Wrapper_IOleInPlaceFrame(ppFrame); Marshal.Release(ppFrame); // the Wrapper_IOleInPlaceFrame took its own reference, so we can release this one. ppFrame = _cachedFrame.CopyAggregatedReference(); Debug.Assert(ppDoc == IntPtr.Zero); // ppDoc not used by VBE, so no need to wrap it } return(hr); }
protected override void Dispose(bool disposing) { if (disposing) { _cachedFrame?.Dispose(); _cachedFrame = null; if (_IOleClientSite != null) { Marshal.ReleaseComObject(_IOleClientSite); _IOleClientSite = null; } if (_IOleInPlaceSite != null) { Marshal.ReleaseComObject(_IOleInPlaceSite); _IOleInPlaceSite = null; } } base.Dispose(disposing); }