前面的方法在服务中使用会有些内存泄漏的问题,这在服务器程序中是不允许的,现提供一种比较安全的方法
1.添加两个函数
//宽字符和窄字符的互转
int WCharToChar(UINT PageCode, std::wstring strWChar, std::string &strChar)
{
strChar.clear();
int ret = 0;
int nSize = (int)strWChar.length()*2;
static char pszDest[1024*10];
if( pszDest )
{
memset( pszDest, 0, nSize+1 );
ret = WideCharToMultiByte(PageCode,NULL,strWChar.c_str(),-1,pszDest,nSize,NULL,FALSE);
pszDest[nSize] = '/0';
strChar = pszDest;
}
return ret;
}
int CharToWChar(UINT PageCode, std::string strChar, std::wstring &strWChar)
{
strWChar.clear();
int ret = 0;
//wchar_t *pszDest = new wchar_t[strChar.length()+1];
static wchar_t pszDest[1024*10];
if( pszDest )
{
memset( pszDest, 0, (strChar.length()+1)*sizeof(wchar_t) );
ret = MultiByteToWideChar(PageCode, 0, strChar.c_str(), -1, pszDest, (int)strChar.length());
pszDest[strChar.length()] = L'/0';
strWChar = pszDest;
}
return ret;
}
2.使用方法:
CString strWString ; //在unicode下是宽字符
std::string strString;
(1)CString转为std::string
WCharToChar( CP_ACP, strWString .GetBuffer(), strString);
(2)std::string转为CString
std::wstring strTemp;
CharToWChar( CP_ACP, strString, strTemp );
strWString = strTemp .c_str();