Поделиться через


IVsExpansionEnumeration - интерфейс

Представляет список фрагментов кода для конкретной службы языка.

Пространство имен:  Microsoft.VisualStudio.TextManager.Interop
Сборка:  Microsoft.VisualStudio.TextManager.Interop.8.0 (в Microsoft.VisualStudio.TextManager.Interop.8.0.dll)

Синтаксис

'Декларация
<GuidAttribute("341E80BE-5B26-4DEE-A111-32A8373D1B51")> _
<InterfaceTypeAttribute()> _
Public Interface IVsExpansionEnumeration
[GuidAttribute("341E80BE-5B26-4DEE-A111-32A8373D1B51")]
[InterfaceTypeAttribute()]
public interface IVsExpansionEnumeration
[GuidAttribute(L"341E80BE-5B26-4DEE-A111-32A8373D1B51")]
[InterfaceTypeAttribute()]
public interface class IVsExpansionEnumeration
[<GuidAttribute("341E80BE-5B26-4DEE-A111-32A8373D1B51")>]
[<InterfaceTypeAttribute()>]
type IVsExpansionEnumeration =  interface end
public interface IVsExpansionEnumeration

Тип IVsExpansionEnumeration предоставляет следующие члены.

Методы

  Имя Описание
Открытый метод GetCount Возвращает число объектов, представленных в этом перечислении.
Открытый метод Next Получает заданное количество объектов из перечисления.
Открытый метод Reset Сбросит перечисление в начале.

В начало страницы

Заметки

Фрагменты кода части кода, которые можно вставить, используя диспетчер фрагментов кода. Каждый фрагмент связанный с указанным языком программирования. Этот интерфейс предоставляет возможность просматривать сведения, связанные с фрагментами кода для указанного языка программирования.

Примечания для разработчиков

Этот интерфейс реализуется диспетчером расширений, представленного интерфейсом IVsExpansionManager. Visual Studio обычно реализует диспетчер расширений.

Примечания к вызывающим объектам

Чтобы получить этот интерфейс, вызовите метод EnumerateExpansions в интерфейсе IVsExpansionManager. См. пример в этом разделе.

Примеры

В этом примере показан метод, который возвращает массив структур VsExpansion каждый из которых описывает один фрагмент кода для указанного языка.

using System;
using System.Collections;
using System.Runtime.InteropServices;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.TextManager.Interop;
using IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider;

namespace MyPackage
{
    public class MyReadSnippets
    {
        private IOleServiceProvider serviceProvider;

        public MyReadSnippets(IOleServiceProvider serviceProvider)
        {
            this.serviceProvider = serviceProvider;
        }


        private object GetService(Guid serviceGuid, Guid interfaceGuid)
        {
            IntPtr pUnknown = IntPtr.Zero;
            object unknown = null;
            int hr = this.serviceProvider.QueryService(ref serviceGuid,
                                    ref interfaceGuid,
                                    out pUnknown);
            if (ErrorHandler.Succeeded(hr))
            {
                unknown = Marshal.GetObjectForIUnknown(pUnknown);
            }
            return unknown;
        }


        private void GetSnippets(Guid languageGuid,ref ArrayList expansionsList)
        {
            IVsTextManager textManager;
            textmanager = (IVsTextManager)this.GetService(typeof(SVsTextManager).GUID,
                                                          typeof(IVsTextManager).GUID);
            if (textManager != null)
            {
                IVsTextManager2 textManager2 = (IVsTextManager2)textManager;
                if (textManager2 != null)
                {
                    IVsExpansionManager expansionManager = null;
                    textManager2.GetExpansionManager(out expansionManager);
                    if (expansionManager != null)
                    {
                        // Tell the environment to fetch all of our snippets.
                        IVsExpansionEnumeration expansionEnumerator = null;
                        expansionManager.EnumerateExpansions(languageGuid,
                                                             0,     // return all info
                                                             null,  // return all types
                                                             0,     // return all types
                                                             0,     // do not return NULL type
                                                             0,     // do not return duplicates
                                                             out expansionEnumerator);
                        if (expansionEnumerator != null)
                        {
                            // Cache our expansions in an array of
                            // VSExpansion structures.
                            uint count   = 0;
                            uint fetched = 0;
                            VsExpansion expansionInfo = new VsExpansion();
                            IntPtr[] pExpansionInfo   = new IntPtr[1];
                            // Allocate enough memory for one VSExpansion structure.
                            // This memory is filled in by the Next method.
                            pExpansionInfo[0] = Marshal.AllocCoTaskMem(Marshal.SizeOf(expansionInfo));

                            expansionEnumerator.GetCount(out count);
                            for (uint i = 0; i < count; i++)
                            {
                                expansionEnumerator.Next(1, pExpansionInfo, out fetched);
                                if (fetched > 0)
                                {
                                    // Convert the returned blob of data into a
                                    // structure that can be read in managed code.
                                    expansionInfo = (VsExpansion)
                                                    Marshal.PtrToStructure(pExpansionInfo[0],
                                                                           typeof(VsExpansion));

                                    if (!String.IsNullOrEmpty(expansionInfo.shortcut))
                                    {
                                        expansionsList.Add(expansionInfo);
                                    }
                                }
                            }
                            Marshal.FreeCoTaskMem(pExpansionInfo[0]);
                        }
                    }
                }
            }
        }
    }
}

См. также

Ссылки

Microsoft.VisualStudio.TextManager.Interop - пространство имен