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