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

Post to Twitter

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

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

Яндекс.Метрика