USES_CONVERSION

반응형

다들 아는 매크로지만.
USES_CONVERSION 이란 매크로를 사용하면 급할 경우 유니코드와 안시 사이의 변환을 간단하게 할 수 있습니다.

사용법은 간단하지요.

// use it to call OLE here
USES_CONVERSION;
pI->SomeFunctionThatNeedsUnicode(T2OLE(lpszA));

정의된 매크로는 다음과 같습니다.

매크로 인자 결과
A2CW (LPCSTR) (LPCWSTR)
A2W (LPCSTR) (LPWSTR)
W2CA (LPCWSTR) (LPCSTR)
W2A (LPCWSTR) (LPSTR)
T2COLE (LPCTSTR) (LPCOLESTR)
T2OLE (LPCTSTR) (LPOLESTR)
OLE2CT (LPCOLESTR) (LPCTSTR)
OLE2T (LPCOLESTR) (LPCSTR)

오히려 중요한 것은 주의점이지요.

단 한가지만 인식하고 있으면 됩니다.
이 놈의 매크로는 메모리를 스택에 잡습니다!!!
위의 CRichEdit::GetSel에서와 마찬가지로 alloca 함수를 사용해서 스택에 잠깐 메모리를 할당하는 것이죠.

그로 인해 나타나는 실질적인 주의사항은

  • 과도한 순환문 속에서는 사용하면 안됩니다. - 매크로가 불릴 때마다 스택의 메모리를 잡아먹습니다. 그 메모리는 함수가 끝날 때까지 해제되지 않습니다.
  • 매크로의 결과를 리턴하면 안됩니다. - 결과로 나오는 포인터는 함수가 끝날 때까지만 유효합니다.

스택에 메모리를 잡기 때문에 속도면에서는 빠르겠지요. 참고로 코드 페이지는 기본적으로는 GetACP 함수의 결과를 사용합니다. #define을 잘 해주면 특정 코드페이지에 대해서 동작하게 할 수도 있을 것 같더군요.

TAGS.

Comments