종류는 [소스 타입]2[새로운 타입] 과 [소스 타입]2C[새로운 타입] 이 있다. 여기서 2C의 C는 const형(읽기전용)이라는 뜻이다.
ATL 3.0 String Conversion Macros
A2BSTR
OLE2A
T2A
W2A
A2COLE
OLE2BSTR
T2BSTR
W2BSTR
A2CT
OLE2CA
T2CA
W2CA
A2CW
OLE2CT
T2COLE
W2COLE
A2OLE
OLE2CW
T2CW
W2CT
A2T
OLE2T
T2OLE
W2OLE
A2W
OLE2W
T2W
W2T
여기서 A, W, T, OLE, BSTR이 있는데 그 의미는 다음과 같다.
A : MBCS 스트링, char* (A 는 ANSI를 의미) -> LPSTR W : Unicode 스트링, wchar_t* (W는 wide를 의미) -> LPWSTR T : TCHAR 스트링, TCHAR* -> LPTSTR OLE : OLECHAR 스트링, OLECHAR* (사실, W와 같은 의미) -> LPOLESTR BSTR : BSTR
이를 통해 몇가지 메크로를 분석해 보면
매크로
인자
결과
A2CW
(LPCSTR)
(LPCWSTR)
A2W
(LPCSTR)
(LPWSTR)
W2CA
(LPCWSTR)
(LPCSTR)
W2A
(LPCWSTR)
(LPSTR)
T2COLE
(LPCTSTR)
(LPCOLESTR)
T2OLE
(LPCTSTR)
(LPOLESTR)
OLE2CT
(LPCOLESTR)
(LPCTSTR)
OLE2T
(LPCOLESTR)
(LPCSTR)
*사용법: #include <atlconv.h> void func( LPSTR lpsz ) { USES_CONVERSION; //형변환 메크로를 사용하기 위해서. ... LPWSTR x = A2W(lpsz) // Do something with x ... }
*사용시 주의점: 이 매크로는 메모리를 스택에 잡음: 1) 과도한 순환문 속에서는 사용하면 안됨. - 매크로가 불릴 때마다 스택의 메모리를 잡아먹습니다. - 그 메모리는 함수가 끝날 때까지 해제되지 않습니다. 2) 매크로의 결과를 리턴하면 안됨. - 결과로 나오는 포인터는 함수가 끝날 때까지만 유효합니다.
댓글을 달아 주세요