MBCS <-> Unicode 간 변환 매크로
CODE2009. 6. 19. 16:48
// Author : saylloyd@gmail.com /*! \brief MBCS 문자열을 WideChar 문자열로 변환하는 함수 WideChar를 받을 버퍼의 공간이 확보되어있어야 한다. \param[in] _M_ 변환할 MBCS 문자열 \param[out] _W_ 변환된 WideChar를 받을 버퍼 \see */ #define M2W(_M_, _W_) {\ int nSize=0;\ nSize=MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (_M_), -1, NULL, 0);\ MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (_M_), -1, (_W_), nSize);\ } /*! \brief MBCS 문자열을 WideChar 문자열로 변환하는 함수 WideChar를 받을 버퍼의 공간을 할당하여 반환한다. 사용이 끝나면 FREE_M2W 매크로를 이용하여 메모리를 해제한다. \param[in] _M_ 변환할 MBCS 문자열 \param[out] _W_ 변환된 WideChar를 받을 버퍼 \see FREE_M2W */ #define ALLOC_M2W(_M_, _W_) {\ int nSize=0;\ nSize=MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (_M_), -1, NULL, 0);\ (_W_)=(PWCHAR)calloc(nSize+1, sizeof(WCHAR));\ MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (_M_), -1, (_W_), nSize);\ } /*! \brief ALLOC_M2W 매크로에서 할당된 메모리를 해제하는 함수 \param[in] _W_ 해제할 WideChar 버퍼 \see ALLOC_M2W */ #define FREE_M2W(_W_) free((_W_)); /*! \brief WideChar 문자열을 MBCS 문자열로 변환하는 함수 MBCS를 받을 버퍼의 공간이 확보되어있어야 한다. \param[in] _W_ 변환할 WideChar 문자열 \param[out] _M_ 변환된 MBCS를 받을 버퍼 \see */ #define W2M(_W_, _M_) {\ int nSize=0;\ nSize=WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, (_W_), -1, NULL, 0, NULL, NULL);\ WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, (_W_), -1, (_M_), nSize, NULL, NULL);\ } /*! \brief WideChar 문자열을 MBCS 문자열로 변환하는 함수 MBCS를 받을 버퍼의 공간을 할당하여 반환한다. 사용이 끝나면 FREE_W2M 매크로를 이용하여 메모리를 해제한다. \param[in] _W_ 변환할 WideChar 문자열 \param[out] _M_ 변환된 MBCS를 받을 버퍼 \see FREE_W2M */ #define ALLOC_W2M(_W_, _M_) {\ int nSize=0;\ nSize=WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, (_W_), -1, NULL, 0, NULL, NULL);\ (_M_)=(PCHAR)calloc(nSize+1, sizeof(CHAR));\ WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK, (_W_), -1, (_M_), nSize, NULL, NULL);\ } /*! \brief ALLOC_W2M 매크로에서 할당된 메모리를 해제하는 함수 \param[in] _M_ 해제할 MBCS 버퍼 \see ALLOC_W2M */ #define FREE_W2M(_M_) free((_M_));