Microsoft Agent 2.0

Использование интерфейсов IEnumXXX

Существует восемь различных интерфейсов IEnumXXX: IEnumFORMATETC, IEnumMoniker, IEnumOLEVerb, IEnumSTATDATA, IEnumSTATSTG, IEnumString, IEnumUnknown и IEnumVariant. Каждый из них имеет методы для перебора элементов: Next, Skip, Reset и Clone, а также стандартные методы, наследуемые у интерфейса IUnknown: QueryInterface, AddRef и Release.

Для получения списка всех элементов нам достаточно использовать метод Next. С его помощью мы перемещаемся от первого элемента к последующему и так далее, — пока не достигнем конца коллекции. Данный метод имеет три параметра. Первый из них задает число запрашиваемых элементов, второй — возвращает элемент или массив элементов (в зависимости от значения первого параметра), а третий — число реально возвращенных элементов.

Таким образом, мы вызываем метод Next для получения одного элемента коллекции до тех пор, пока число возвращенных элементов не будет равно 0, что означает, что мы достигли конца коллекции. Поясним это на следующем фрагменте кода:

Fetched := $ff; // 255 элементов
Repeat
   Enum.Next(1, V, @Fetched);
//
// Теперь V содержит элемент коллекции
//
Until Fetched = 0;

Вначале мы присваиваем переменной Fetched ненулевое значение и в цикле извлекаем по одному элементу, проверяя значение переменной Fetched. Как только оно становится равным 0, мы прекращаем перебор коллекции.

В заключение отметим, что тип элемента коллекции зависит от типа выбранного интерфейса. Соответствия между ними показаны в следующей таблице:

Интерфейс Тип элемента
IEnumFORMATETC Структуры типа FORMATETC
IEnumMoniker Моникеры или их компоненты
IEnumOLEVerb Набор действий, которые возможны для объекта
IEnumSTATDATA Структуры типа STATDATA
IEnumSTATSTG Структуры типа STATSTG
IEnumString Строки
IEnumUnknown Указатели на интерфейс IUnknown
IEnumVariant Вариантные переменные (OLEVariant)

Возврат

Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует