Delphi → Количество элементов в IEnumVARIANT

Май 13, 2011

Казалось бы интерфейс IEnumVARIANT всем хорошо - универсальный и простой, но его простота не должна ограничивать функциональность. А она ограничена, так как интерфейс содержит всего 4 метода: Next, Reset, Skip, Clone. Поэтому приходится реализовывать некоторые методы самому.

Один из таких методов - получение количества элементов:

function EnumCount(NewEnum: IInterface): Cardinal;
var
  FEnum: IEnumVariant;
  FCount: ULONG;
  FVariant: OleVariant;
  FIndex: Cardinal;
  FResult: HRESULT;
begin
  FIndex := 0;
  try
    FResult := NewEnum.QueryInterface(IEnumVariant, FEnum);
  except
    FResult := E_FAIL;
  end;
  while SUCCEEDED(FResult) do
  begin
    if not VarIsNull(FVariant) then FVariant := Unassigned;
    if FEnum.Next(1, FVariant, FCount) <> S_OK then Break;
    Inc(FIndex);
  end;
  FEnum := nil;
  Result := FIndex;
end;


В качестве аргумента функции указывается интерфейс _NewEnum.

Пример использования:

ADsGetObject('WinNT://./lanmanserver', IADsFileServiceOperations, Pointer(FRPC));
if EnumCount(FRPC.Sessions._NewEnum) >= 10 then
ShowMessage('Limit sessions');
Порой зайдешь на какой-нибудь сайт и задумаешься - "А кто создал его?!". Ищешь информацию на сайте, как например, форму обратную связь, а там никаких тебе контактных данных. Тут то и пригодиться просмотр ip информации о домене, на котором расположен сайт. Обычно там указывается дата регистрации домена и что самое главное электронный адрес почтового ящика.

Post to Twitter

Похожие статьи:

  1. Утечка памяти в IEnumVARIANT
  2. Многопоточность в Delphi
  3. Компоненты в массиве TObjectList
  4. Ускоритель SQLite запросов

Нет комментариев

Ваш комментарий

Rambler's Top100 Яндекс.Метрика