Exemple #1
0
        private T GetService <T>(ITextBuffer textBuffer, Type serviceType)
        {
            var vsBuffer = adaptersFactory.GetBufferAdapter(textBuffer);

            if (vsBuffer == null)
            {
                return(default(T));
            }

            Guid            guidServiceProvider = VSConstants.IID_IUnknown;
            IObjectWithSite objectWithSite      = vsBuffer as IObjectWithSite;
            IntPtr          ptrServiceProvider  = IntPtr.Zero;

            objectWithSite.GetSite(ref guidServiceProvider, out ptrServiceProvider);
            Microsoft.VisualStudio.OLE.Interop.IServiceProvider serviceProvider =
                (Microsoft.VisualStudio.OLE.Interop.IServiceProvider)Marshal.GetObjectForIUnknown(ptrServiceProvider);

            Guid   guidService   = serviceType.GUID;
            Guid   guidInterface = typeof(T).GUID;
            IntPtr ptrObject     = IntPtr.Zero;

            int hr = serviceProvider.QueryService(ref guidService, ref guidInterface, out ptrObject);

            if (ErrorHandler.Failed(hr) || ptrObject == IntPtr.Zero)
            {
                return(default(T));
            }

            T result = (T)Marshal.GetObjectForIUnknown(ptrObject);

            Marshal.Release(ptrObject);

            return(result);
        }
        private void TestSetGet()
        {
            int    hr;
            object o;

            hr = m_iows.GetSite(typeof(IAMGraphBuilderCallback).GUID, out o);
            Debug.Assert(hr < 0, "Should fail until we assign a value");

            foo1 f = new foo1();

            hr = m_iows.SetSite(f);
            DsError.ThrowExceptionForHR(hr);

            hr = m_iows.GetSite(typeof(IAMGraphBuilderCallback).GUID, out o);
            DsError.ThrowExceptionForHR(hr);
            Debug.Assert(o == f);
        }
Exemple #3
0
        private void Config()
        {
            int         hr;
            IBaseFilter pFilter;
            object      o;

            IFilterGraph ifg = new FilterGraph() as IFilterGraph;

            IObjectWithSite iows = ifg as IObjectWithSite;

            hr = iows.SetSite(this);
            hr = iows.GetSite(typeof(IAMFilterGraphCallback).GUID, out o);
            hr = ((IGraphBuilder)ifg).AddSourceFilter("DirectShowLib.dll", null, out pFilter);
            IPin pPin = DsFindPin.ByDirection(pFilter, PinDirection.Output, 0);

            hr = ((IGraphBuilder)ifg).Render(pPin);
            //hr = ((IGraphBuilder)ifg).RenderFile("DirectShowLib.dll", null);
            DsError.ThrowExceptionForHR(hr);
        }
Exemple #4
0
        public static Microsoft.VisualStudio.OLE.Interop.IServiceProvider GetServiceProvider(this IVsTextBuffer buffer)
        {
            IntPtr pUnk = IntPtr.Zero;

            try
            {
                IObjectWithSite objectWithSite = buffer as IObjectWithSite;

                Guid gUID = typeof(Microsoft.VisualStudio.OLE.Interop.IServiceProvider).GUID;
                objectWithSite.GetSite(ref gUID, out pUnk);
                return(Marshal.GetObjectForIUnknown(pUnk) as Microsoft.VisualStudio.OLE.Interop.IServiceProvider);
            }
            finally
            {
                if (pUnk != IntPtr.Zero)
                {
                    Marshal.Release(pUnk);
                }
            }
        }
Exemple #5
0
        private static System.IServiceProvider GetServiceProviderFromTextBuffer(ITextBuffer textBuffer)
        {
            if (textBuffer.Properties.ContainsProperty(typeof(IVsTextBuffer)))
            {
                IObjectWithSite objectWithSite = textBuffer.Properties.GetProperty <IObjectWithSite>(typeof(IVsTextBuffer));
                if (objectWithSite != null)
                {
                    Guid   serviceProviderGuid = typeof(Microsoft.VisualStudio.OLE.Interop.IServiceProvider).GUID;
                    IntPtr ppServiceProvider   = IntPtr.Zero;
                    // Get the service provider pointer using the Guid of the OleInterop ServiceProvider
                    objectWithSite.GetSite(ref serviceProviderGuid, out ppServiceProvider);

                    if (ppServiceProvider != IntPtr.Zero)
                    {
                        // Create a System.ServiceProvider with the OleInterop ServiceProvider
                        OleInterop.IServiceProvider oleInteropServiceProvider = (OleInterop.IServiceProvider)Marshal.GetObjectForIUnknown(ppServiceProvider);
                        return(new Microsoft.VisualStudio.Shell.ServiceProvider(oleInteropServiceProvider));
                    }
                }
            }

            return(null);
        }
        internal static IVsWindowFrame GetWindowFrame(this IVsTextView textView)
        {
            IObjectWithSite objWithSite         = (IObjectWithSite)textView;
            var             serviceProviderGuid = typeof(Microsoft.VisualStudio.OLE.Interop.IServiceProvider).GUID;

            IntPtr serviceProviderPointer;

            objWithSite.GetSite(ref serviceProviderGuid, out serviceProviderPointer);
            var serviceProvider = (Microsoft.VisualStudio.OLE.Interop.IServiceProvider)Marshal.GetObjectForIUnknown(serviceProviderPointer);

            Marshal.Release(serviceProviderPointer);

            serviceProviderGuid = typeof(SVsWindowFrame).GUID;
            var    interfaceGuid = typeof(IVsWindowFrame).GUID;
            IntPtr windowFramePointer;

            serviceProvider.QueryService(ref serviceProviderGuid, ref interfaceGuid, out windowFramePointer);

            var windowFrame = (IVsWindowFrame)Marshal.GetObjectForIUnknown(windowFramePointer);

            Marshal.Release(windowFramePointer);

            return(windowFrame);
        }
 /// <summary>Extension method to simplify using the <see cref="IObjectWithSite.GetSite"/> method.</summary>
 /// <typeparam name="T">Type of the interface to get.</typeparam>
 /// <param name="ows">An <see cref="IObjectWithSite"/> instance.</param>
 /// <returns>Receives the interface pointer requested in <typeparamref name="T"/>.</returns>
 public static T GetSite <T>(this IObjectWithSite ows) where T : class
 {
     ows.GetSite(typeof(T).GUID, out var pSite).ThrowIfFailed(); return((T)pSite);
 }