IVsExpansionEnumeration Интерфейс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Представляет список фрагментов кода для определенной службы языка.
public interface class IVsExpansionEnumeration
public interface class IVsExpansionEnumeration
__interface IVsExpansionEnumeration
[System.Runtime.InteropServices.ComConversionLoss]
[System.Runtime.InteropServices.Guid("341E80BE-5B26-4DEE-A111-32A8373D1B51")]
[System.Runtime.InteropServices.InterfaceType(1)]
public interface IVsExpansionEnumeration
[<System.Runtime.InteropServices.ComConversionLoss>]
[<System.Runtime.InteropServices.Guid("341E80BE-5B26-4DEE-A111-32A8373D1B51")>]
[<System.Runtime.InteropServices.InterfaceType(1)>]
type IVsExpansionEnumeration = interface
Public Interface IVsExpansionEnumeration
- Атрибуты
Примеры
В этом примере показан метод, извлекающий массив структур, 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]);
}
}
}
}
}
}
}
Комментарии
Фрагменты кода — это фрагменты кода, которые можно вставить с помощью диспетчера фрагментов кода. Каждый фрагмент кода связан с определенным языком программирования. Этот интерфейс позволяет исследовать сведения, связанные с фрагментами кода для конкретного языка программирования.
Примечания для тех, кто реализует этот метод
Этот интерфейс реализуется диспетчером расширения, представленным IVsExpansionManager интерфейсом. Visual Studio обычно реализует диспетчер расширения.
Примечания для тех, кто вызывает этот метод
Чтобы получить этот интерфейс, вызовите EnumerateExpansions(Guid, Int32, String[], Int32, Int32, Int32, IVsExpansionEnumeration) метод в IVsExpansionManager интерфейсе. См. пример в этом разделе.
Методы
| GetCount(UInt32) |
Возвращает количество объектов, представленных этим перечислением. |
| Next(UInt32, IntPtr[], UInt32) |
Возвращает указанное число объектов из перечисления. |
| Reset() |
Сбрасывает последовательность в начало. |