겸손한 개발을 위한 자양분

// 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_));