|
|
#include "srheader.hxx"
//+---------------------------------------------------------------------------
//
// Method: SrTstStrCat
//
// Synopsis: Concatenates Str1 and Str1 and puts resulting string in
// allocated buf returns address to the buf in plpDest
// (char version)
//
// Arguments: plpDest: pointer to pointer to the concat. string
// szStr1 : pointer to the 1st string
// szStr2 : pointer to the 2nd string
//
// Returns: HRESULT
//
// History: 07-28-2000 a-robog Created
// 09-24-2000 ristern Moved out of the class
// 10-01-2000 ristern Moved to strutils
// 04-May-2001 weiyouc Copied to StrUtils.cxx
//
// Notes:
//
//----------------------------------------------------------------------------
HRESULT SrTstStrCat(IN LPCSTR szStr1, IN LPCSTR szStr2, OUT LPSTR *ppDest) { HRESULT hr = S_OK; DWORD dwSize = 0;
DH_VDATEPTROUT(ppDest, LPSTR); DH_VDATEPTRIN (szStr1,char); DH_VDATEPTRIN (szStr2,char);
dwSize = strlen(szStr1)+strlen(szStr2)+1; *ppDest = new char[dwSize]; DH_ABORTIF(NULL == *ppDest, E_OUTOFMEMORY, TEXT("new char[...]"));
strcpy(*ppDest,szStr1); strcat(*ppDest,szStr2);
ErrReturn: return hr; }
//+---------------------------------------------------------------------------
//
// Method: SrTstTStrCat
//
// Synopsis: Concatenates Str1 and Str1 and puts resulting string in
// allocated buf returns address to the buf in plpDest
// (TCHAR version)
//
// Arguments: plpDest: pointer to pointer to the concat. string
// szStr1 : pointer to the 1st string
// szStr2 : pointer to the 2nd string
//
// Returns: HRESULT
//
// History: 07-28-2000 a-robog Created
// 09-24-2000 ristern Moved out of the class
// 09-30-2000 ristern Converted to TCHAR
// 10-01-2000 ristern Moved to strutils
// 04-May-2001 weiyouc Copied to StrUtils.cxx
//
// Notes:
//
//----------------------------------------------------------------------------
HRESULT SrTstTStrCat(IN LPCTSTR szStr1, IN LPCTSTR szStr2, OUT LPTSTR *ppDest) { HRESULT hr = S_OK; DWORD dwSize = 0;
DH_VDATEPTROUT(ppDest, LPTSTR); DH_VDATEPTRIN (szStr1, TCHAR); DH_VDATEPTRIN (szStr2, TCHAR);
dwSize = _tcslen(szStr1)+_tcslen(szStr2)+1; *ppDest = new TCHAR[dwSize]; DH_ABORTIF(NULL == *ppDest, E_OUTOFMEMORY, TEXT("new TCHAR[...]"));
_tcscpy(*ppDest,szStr1); _tcscat(*ppDest,szStr2);
ErrReturn: return hr; }
//+--------------------------------------------------------------------------
//
// Function: CopyString
//
// Synopsis: Copy a wide (Unicode) string
//
// Parameters: [pszSource] -- The original string
// [ppszDest] -- The copy
//
// Returns: S_OK if all went well
//
// History: 31-Oct-96 MikeW Created
//
//---------------------------------------------------------------------------
HRESULT CopyString(LPCWSTR pszSource, LPWSTR *ppszDest) { size_t bufferSize; HRESULT hr = S_OK;
*ppszDest = NULL;
//
// Find the length of the original string
//
bufferSize = wcslen(pszSource) + 1;
//
// Allocate the buffer
//
*ppszDest = new WCHAR[bufferSize];
if (NULL == *ppszDest) { hr = E_OUTOFMEMORY; }
//
// Copy the string
//
if (S_OK == hr) { wcscpy(*ppszDest, pszSource); }
return hr; }
//+--------------------------------------------------------------------------
//
// Function: CopyString
//
// Synopsis: Copy a multibyte string
//
// Parameters: [pszSource] -- The original string
// [ppszDest] -- The copy
//
// Returns: S_OK if all went well
//
// History: 31-Oct-96 MikeW Created
//
//---------------------------------------------------------------------------
HRESULT CopyString(LPCSTR pszSource, LPSTR *ppszDest) { size_t bufferSize; HRESULT hr = S_OK;
*ppszDest = NULL;
//
// Find the length of the original string (in bytes for DBCS)
//
bufferSize = strlen(pszSource) + 1;
//
// Allocate the buffer
//
*ppszDest = new char[bufferSize];
if (NULL == *ppszDest) { hr = E_OUTOFMEMORY; }
//
// Copy the string
//
if (S_OK == hr) { strcpy(*ppszDest, pszSource); }
return hr; }
//+--------------------------------------------------------------------------
//
// Function: CopyString
//
// Synopsis: Convert a wide (Unicode) string to a multibyte string
//
// Parameters: [pszSource] -- The wide string
// [ppszDest] -- Where to put the multibyte string
//
// Returns: S_OK if all went well
//
// History: 31-Oct-96 MikeW Created
//
//---------------------------------------------------------------------------
HRESULT CopyString(LPCWSTR pszSource, LPSTR *ppszDest) { int bufferSize; HRESULT hr = S_OK;
*ppszDest = NULL;
//
// Find the length of the buffer needed for the multibyte string
//
bufferSize = WideCharToMultiByte( CP_ACP, 0, pszSource, -1, *ppszDest, 0, NULL, NULL);
if (0 == bufferSize) { hr = HRESULT_FROM_WIN32(GetLastError()); }
//
// Allocate the buffer
//
if(S_OK == hr) { *ppszDest = new char[bufferSize];
if (NULL == *ppszDest) { hr = E_OUTOFMEMORY; } }
//
// Do the conversion
//
if (S_OK == hr) { bufferSize = WideCharToMultiByte( CP_ACP, 0, pszSource, -1, *ppszDest, bufferSize, NULL, NULL);
if (0 == bufferSize) { hr = HRESULT_FROM_WIN32(GetLastError()); } }
//
// Clean up if there's an error
//
if (S_OK != hr && NULL != *ppszDest) { delete [] *ppszDest; *ppszDest = NULL; }
return hr; }
//+--------------------------------------------------------------------------
//
// Function: CopyString
//
// Synopsis: Convert a multibyte string to a wide (Unicode) string
//
// Parameters: [pszSource] -- The multibyte string
// [ppszDest] -- Where to put the wide string
//
// Returns: S_OK if all went well
//
// History: 31-Oct-96 MikeW Created
//
//---------------------------------------------------------------------------
HRESULT CopyString(LPCSTR pszSource, LPWSTR *ppszDest) { int bufferSize; HRESULT hr = S_OK;
*ppszDest = NULL;
//
// Find the length of the buffer needed for the multibyte string
//
bufferSize = MultiByteToWideChar( CP_ACP, 0, pszSource, -1, *ppszDest, 0);
if (0 == bufferSize) { hr = HRESULT_FROM_WIN32(GetLastError()); }
//
// Allocate the buffer
//
if(S_OK == hr) { *ppszDest = new WCHAR[bufferSize];
if (NULL == *ppszDest) { hr = E_OUTOFMEMORY; } }
//
// Do the conversion
//
if (S_OK == hr) { bufferSize = MultiByteToWideChar( CP_ACP, 0, pszSource, -1, *ppszDest, bufferSize);
if (0 == bufferSize) { hr = HRESULT_FROM_WIN32(GetLastError()); } }
//
// Clean up if there's an error
//
if (S_OK != hr && NULL != *ppszDest) { delete [] *ppszDest; *ppszDest = NULL; }
return hr; }
|