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


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

Функция ADsBuildVarArrayStr создает массив вариантов из массива строк Юникода.

Синтаксис

HRESULT ADsBuildVarArrayStr(
  [in]  LPWSTR  *lppPathNames,
  [in]  DWORD   dwPathNames,
  [out] VARIANT *pVar
);

Параметры

[in] lppPathNames

Тип: LPWSTR*

Массив строк Юникода, заканчивающихся значением NULL.

[in] dwPathNames

Тип: DWORD

Число записей Юникода в заданном массиве.

[out] pVar

Тип: VARIANT*

Указатель на результирующий массив вариантов.

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

Тип: HRESULT

Этот метод поддерживает стандартные возвращаемые значения, а также следующие.

Дополнительные сведения о других возвращаемых значениях см. в разделе Коды ошибок ADSI.

Комментарии

Для поддержки автоматизации используйте функцию ADsBuildVarArrayStr для преобразования строк Юникода в массив строк типа variant.

Примеры

В следующем примере кода показано, как использовать функцию ADsBuildVarArrayStr для преобразования имен классов объектов из строк Юникода в вариантный массив строк.

HRESULT EnumObject(LPWSTR pszADsPath,
                   LPWSTR * lppClsNames,
                   DWORD dwClsNames)
{
    ULONG ulFetched = 0L;
    IEnumVARIANT * pEnumVar = NULL;
    VARIANT varFilter, varArray[MAX_ADS_ENUM];
    HRESULT hr;
    IADsContainer * pADsContainer = NULL;
    DWORD dwObjects = 0, dwEnumCount=0, i=0;
    BSTR bstrName;
    BOOL fContinue=TRUE;
 
    hr = ADsGetObject(pszADsPath,
                     IID_IADsContainer,
                     (void**)&pADsContainer);
    if (FAILED(hr)) goto cleanup;
 
    // Create a string array of class names as search filters.
    VariantInit(&varFilter);
    hr = ADsBuildVarArrayStr(lppClsNames, dwClsNames, &varFilter);
    if (FAILED(hr)) goto cleanup;
 
    // Apply filters to objects in the container.
    hr = pADsContainer->put_Filter(varFilter);
    if(FAILED(hr)) goto cleanup;
 
    // Create an enumerator.
    hr = ADsBuildEnumerator(pADsContainer, &pEnumVar);
    if(FAILED(hr)) goto cleanup;
 
    // Enumerate the objects and print the names.
    while(fContinue) {
        IADs* pObject;
        hr = ADsEnumerateNext(pEnumVar, MAX_ADS_ENUM,
                            varArray, &ulFetched);
        if(hr == S_FALSE) fContinue = FALSE;
        dwEEnumCount++;
 
        for (i=0; i<ulFetched; i++) {
            IDispatch *pDispatch = NULL;
            pDispatch = varArray[I].pDispVal;
            hr = pDispatch->QueryInterface(IID_IADs,
                                        (void**) &pObject);
            if (FAILED(hr)) goto cleanup;
 
            hr = pObject->get_Name(&bstrName);
            if(FAILED(hr)) goto cleanup;
            printf(" Object name: %S\n",bstrName);
 
            // Release the ADSI object.
            SysFreeString(bstrname);
            pObject->Release();
            pDispatch->Release();
        }
        memset(varArray, 0, sizeof(VARIANT)*MAX_ADS_ENUM);
        dwObjects += ulFetched;
    }
    hr = S_OK;
 
cleanup:
    if(bstrName) SysFreeString(bstrName);
    if(pEnumvar) ADsFreeEnumerator(pEnumVar);
    if(pADsContainer) pADsContainer->Release();
 
    return (hr);
}

Требования

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

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

Коды ошибок ADSI

Функции ADSI

ADsBuildVarArrayInt