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 |
程式庫 | Activeds.lib |
Dll | Activeds.dll |