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 |