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


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

Функция ReallocADsMem перераспределяет и копирует существующий блок памяти.

Синтаксис

LPVOID ReallocADsMem(
  [in] LPVOID pOldMem,
  [in] DWORD  cbOld,
  [in] DWORD  cbNew
);

Параметры

[in] pOldMem

Тип: LPVOID

Указатель на копируемую память. ReallocADsMem освободит эту память с помощью FreeADsMem после ее копирования. Если не удается выделить дополнительную память, эта память не освобождается. Эта память должна быть выделена с помощью функции AllocADsMem, AllocADsStr, ReallocADsMem или ReallocADsStr .

Вызывающий объект должен освободить эту память, если она больше не требуется, передав этот указатель в FreeADsMem.

[in] cbOld

Тип: DWORD

Размер копируемой памяти в байтах.

[in] cbNew

Тип: DWORD

Размер выделенной памяти в байтах.

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

Тип: LPVOID

При успешном выполнении функция возвращает указатель на новую выделенную память. В противном случае возвращается значение NULL.

Комментарии

Если значение cbNew меньше cbOld, существующая память усекается в соответствии с новым размером памяти.

Примеры

В следующем примере кода показано, как использовать ReallocADsMem для увеличения строки.

LPWSTR pwszPrefix = L"LDAP://"
DWORD dwOldSize = (lstrlenW(pwszPrefix) + 1) * sizeof(WCHAR);

LPWSTR pwszADsPath = (LPWSTR)AllocADsMem(dwOldSize);
if(pwszADsPath)
{
    LPWSTR pwszDN = L"DC=fabrikam,DC=com";

    wcsncpy_s(pwszADsPath, pwszPrefix); // Path becomes "LDAP://"
    wprintf(L"path = %s\n", pwszADsPath);

    DWORD dwNewSize = (lstrlenW(pwszPrefix) + lstrlenW(pwszDN) + 1) * sizeof(WCHAR);
    
    /*
    If successful, this will free the old path buffer, so it does not have to be 
    freed manually. But if it fails, the original memory still exists, so the 
    reallocated memory pointer is temporarily placed in another variable.
    */
    LPWSTR pwszNewPath = (LPWSTR)ReallocADsMem(pwszADsPath, dwOldSize, dwNewSize);
    if(pwszNewPath)
    {
        pwszADsPath = pwszNewPath;

        // Path is still "LDAP://"
        wcsncat_s(pwszADsPath, pwszDN);

        // Path is "LDAP://DC=fabrikam,DC=com"
        wprintf(L"path = %s\n", pwszADsPath);
    }
    else
    {
        wprintf(L"Unable to allocate additional memory.");
    }

    // Free remaining memory.
    FreeADsMem(pwszADsPath);
}

Требования

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

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

Функции ADSI

AllocADsMem

AllocADsStr

FreeADsMem

ReallocADsMem