Поделиться через


Функция ADsBuildEnumerator (adshlp.h)

Функция ADsBuildEnumerator создает объект перечислителя для указанного объекта контейнера ADSI.

Синтаксис

HRESULT ADsBuildEnumerator(
  [in]  IADsContainer *pADsContainer,
  [out] IEnumVARIANT  **ppEnumVariant
);

Параметры

[in] pADsContainer

Тип: IADsContainer*

Указатель на интерфейс IADsContainer для перечисляемого объекта.

[out] ppEnumVariant

Тип: IEnumVARIANT**

Указатель на указатель интерфейса IEnumVARIANT , который получает объект перечислителя, созданный для указанного объекта контейнера.

Возвращаемое значение

Тип: HRESULT

Этот метод поддерживает стандартные возвращаемые значения HRESULT , включая S_OK для успешной операции. Дополнительные сведения о других возвращаемых значениях см. в разделе Коды ошибок ADSI.

Комментарии

Вспомогательская функция ADsBuildEnumerator создает оболочку для вызовов, используемых для получения интерфейса IEnumVARIANT в объекте перечислителя.

Перечисление доступных объектов в контейнере

  1. Вызовите функцию ADsBuildEnumerator , чтобы создать объект IEnumVARIANT , который будет перечислять содержимое контейнера.
  2. Вызовите функцию ADsEnumerateNext столько раз, сколько необходимо для получения элементов из объекта перечислителя.
  3. Вызовите функцию ADSFreeEnumerator , чтобы освободить объект перечислителя, когда он больше не требуется.
Если сервер поддерживает поиск по страницам и клиент указал размер страницы, превышающий максимальный размер результатов поиска, разрешенный сервером, функция ADsBuildEnumerator будет пересылать ошибки и результаты с сервера пользователю.

Примеры

В следующем примере кода показано, как можно использовать функции ADsBuildEnumerator, ADsEnumerateNext и ADSFreeEnumerator для перечисления содержимого контейнера.

HRESULT PrintAllObjects(IADsContainer* pContainer)
{
    HRESULT hr;
     
    if(NULL == pContainer) 
    {
        return E_INVALIDARG;
    }
     
    IEnumVARIANT *pEnum = NULL;

    // Create an enumerator object in the container.
    hr = ADsBuildEnumerator(pContainer, &pEnum);
    if(SUCCEEDED(hr))
    {
        VARIANT var;
        ULONG ulFetched = 0L;

        // Get the next contained object.
        while(S_OK == (hr = ADsEnumerateNext(pEnum, 1, &var, &ulFetched)) && (ulFetched > 0))
        {
            IADs *pADs;

            // Print the object
            hr = V_DISPATCH(&var)->QueryInterface(IID_IADs, (void**)&pADs);
            if(SUCCEEDED(hr))
            {
                CComBSTR sbstr;
                IADsContainer *pChildContainer;

                hr = pADs->get_Name(&sbstr);
                if(SUCCEEDED(hr))
                {
                    wprintf(sbstr);
                    wprintf(L"\n");
                }

                hr = pADs->QueryInterface(IID_IADsContainer, (void**)&pChildContainer);
                if(SUCCEEDED(hr))
                {
                    // If the retrieved object is a container, recursively print its contents as well.
                    PrintAllObjects(pChildContainer);
                }
                
                pADs->Release();
            }
            
            // Release the VARIANT.
            VariantClear(&var);
        }
        
        ADsFreeEnumerator(pEnum);
    }

    return hr;
}

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Минимальная версия сервера Windows Server 2008
Целевая платформа Windows
Header adshlp.h
Библиотека Activeds.lib
DLL Activeds.dll

См. также раздел

Коды ошибок ADSI

Функции ADSI

ADsEnumerateNext

ADsFreeEnumerator

IADsContainer

IEnumVARIANT