ATL and MFC string conversion macro를 사용할 때 주의할 점이 있다.

반드시 지켜야할 주의점과 알아둘 것.


■ 반드시 지켜야 할것.

conversion macro를 사용할때, 보통은 잘 되는데, 대량의 데이터를 변환하는 경우 프로그램이 죽는 현상이 생긴다.

이것은 macro가 stack 메모리를 사용하기 때문에 할당할 수 있는 메모리가 1MB이내라서 지역안에서 1MB 이상의 변환을 시도하면 overflow가 나는 것이다.

MSDN문서에서 찾은것은 아니고, 경험담이다;

1MB이상의 변환이 예상되는 부분에는 macro 대신

WideCharToMultiByte, MultiByteToWideChar API를 이용하는것이 안전한다.


■ 알아두어야 할 것

default static buffer size는 128 character 또는 64 character다. ㅡ.ㅡ?


MSDN 문서의 상단부분에 있는 설명에는 64 characters가 넘어가면 EX version을 쓰라고 나오고, 문서 하단에는 default static buffer size는 128 characters 라고 나온다. 뭥미?


대략 128바이트라고 생각되나 정확한것이 아니니  변환할 대상 string이 64글자가 넘어가는 경우 EX가 붙은 매크로를 사용하자.


Ex)

// Changing the size of the buffer.
void ExampleFunctionW( LPCWSTR pszW )
{
   // Use a 16-character buffer.
   ExampleFunctionA( CW2CAEX< 16 >( pszW ) );
}

<>안에 숫자가 buffer크기가 된다.


그런데 코드를 작성해서 테스트 해보면

64글자, 128글자가 넘어도 잘 변환된다. ㅡ.ㅡ


그래도 혹시나 나중에 문제가 생길지도 모르니 알아두자.

Posted by 아..몰라 ㅡ.ㅡ+
,