windows-nt/Source/XPSP1/NT/multimedia/media/sndrec32/o2base/memutils.cxx
2020-09-26 16:20:57 +08:00

70 lines
1.3 KiB
C++

//+---------------------------------------------------------------------
//
// File: memutils.cxx
//
// Contents: IMalloc-related helpers
//
//----------------------------------------------------------------------
#include "headers.hxx"
#pragma hdrstop
HRESULT
OleAllocMem(MEMCTX ctx, ULONG cb, LPVOID FAR* ppv)
{
HRESULT r;
LPMALLOC pMalloc;
if (OK(r = CoGetMalloc(ctx, &pMalloc)))
{
*ppv = pMalloc->Alloc(cb);
if (*ppv == NULL)
{
DOUT(TEXT("o2base/memutils/OleAllocMem failed\r\n"));
r = E_OUTOFMEMORY;
}
pMalloc->Release();
}
return r;
}
void
OleFreeMem(MEMCTX ctx, LPVOID pv)
{
LPMALLOC pMalloc;
if (OK(CoGetMalloc(ctx, &pMalloc)))
{
pMalloc->Free(pv);
pMalloc->Release();
}
}
HRESULT
OleAllocString(MEMCTX ctx, LPCOLESTR lpstrSrc, LPOLESTR FAR* ppstr)
{
HRESULT r;
if (lpstrSrc == NULL)
{
*ppstr = NULL;
r = NOERROR;
}
else
{
r = OleAllocMem(ctx,
(ostrlen(lpstrSrc)+1) * sizeof(OLECHAR),
(LPVOID FAR*)ppstr);
if (*ppstr != NULL)
{
ostrcpy((LPOLESTR)*ppstr, lpstrSrc);
}
}
return r;
}
void
OleFreeString(MEMCTX ctx, LPOLESTR lpstr)
{
OleFreeMem(ctx, lpstr);
}