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 |
标头 | adshlp.h |
Library | Activeds.lib |
DLL | Activeds.dll |