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); }
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); }
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); } } }
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); }