70 lines
1.3 KiB
C++
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);
|
||
|
}
|
||
|
|