380 lines
8.2 KiB
C++
380 lines
8.2 KiB
C++
#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;
|
|
}
|
|
|
|
|
|
|