VarWstrCat
Append wide characters, or another BSTR, to a BSTR.
////////////////////////////////////////////////////////////////////////////////////////
// VarWstrCat
//
// To a BSTR, efficiently append (concatenate) wide characters (or another BSTR).
//
// Initial value of the BSTR can be NULL.
// 2003 - Glenn Slayden
//
////////////////////////////////////////////////////////////////////////////////////////
HRESULT VarWstrCat(BSTR *pbs,TCHAR *wsz)
{
if (!wsz)
return NOERROR;
if (!pbs)
return E_POINTER;
int c0 = *pbs ? SysStringLen(*pbs) : 0;
int c1 = lstrlen(wsz);
int c = c0 + c1;
BSTR bs = SysAllocStringLen(NULL,c);
if (!bs)
return E_OUTOFMEMORY;
if (*pbs)
{
memcpy(bs,*pbs,c0 * sizeof(TCHAR));
SysFreeString(*pbs);
}
memcpy(&bs[c0],wsz,c1 * sizeof(TCHAR));
*pbs = bs;
return NOERROR;
}