ReallocADsMem 函数 (adshlp.h)

ReallocADsMem 函数重新分配并复制现有内存块。

语法

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

参数

[in] pOldMem

类型: LPVOID

指向要复制的内存的指针。 复制后,ReallocADsMem 将使用 FreeADsMem 释放此内存。 如果无法分配额外的内存,则不会释放此内存。 此内存必须已使用 AllocADsMemAllocADsStrReallocADsMemReallocADsStr 函数进行分配。

当不再需要此内存时,调用方必须通过将此指针传递给 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
标头 adshlp.h
Library Activeds.lib
DLL Activeds.dll

另请参阅

ADSI 函数

AllocADsMem

AllocADsStr

FreeADsMem

ReallocADsMem