char型をマルチバイト文字列に変換する。
HRESULT Cxxxx::DXconvAnsiToWide( WCHAR* wstrDest, const CHAR* strSrc, int ct )
{
// 引数の*がNULLの場合と、文字数が1以下の場合はエラー
if( wstrDest==NULL || strSrc==NULL || ct < 1 )
return E_INVALIDARG;
int nResult = MultiByteToWideChar( CP_ACP, 0, strSrc, -1, wstrDest, ct );
wstrDest[ct-1] = 0;
if( nResult == 0 )
return E_FAIL;
return S_OK;
}
HRESULT Cxxxx::DXconvAnsiToWide( WCHAR* wstrDest, const CHAR* strSrc, int ct )
{
// 引数の*がNULLの場合と、文字数が1以下の場合はエラー
if( wstrDest==NULL || strSrc==NULL || ct < 1 )
return E_INVALIDARG;
int nResult = MultiByteToWideChar( CP_ACP, 0, strSrc, -1, wstrDest, ct );
wstrDest[ct-1] = 0;
if( nResult == 0 )
return E_FAIL;
return S_OK;
}
Unicode文字列をマルチバイト文字列に変換する。
char* Cxxxx::ConvertFromUnicode(CString pszWchar)
{
int nLen;
char* pszChar;
//charに必要な文字数の取得
nLen = ::WideCharToMultiByte(CP_THREAD_ACP,0,pszWchar,-1,NULL,0,NULL,NULL);
pszChar = new char[nLen];
if(pszChar == NULL)
return NULL;
//変換
nLen = ::WideCharToMultiByte(CP_THREAD_ACP,0,pszWchar,wcslen(pszWchar)+1,pszChar,nLen,NULL,NULL);
if(nLen)
return pszChar;
delete pszChar;
return NULL;
}
char* Cxxxx::ConvertFromUnicode(CString pszWchar)
{
int nLen;
char* pszChar;
//charに必要な文字数の取得
nLen = ::WideCharToMultiByte(CP_THREAD_ACP,0,pszWchar,-1,NULL,0,NULL,NULL);
pszChar = new char[nLen];
if(pszChar == NULL)
return NULL;
//変換
nLen = ::WideCharToMultiByte(CP_THREAD_ACP,0,pszWchar,wcslen(pszWchar)+1,pszChar,nLen,NULL,NULL);
if(nLen)
return pszChar;
delete pszChar;
return NULL;
}