Graphisoft®

GSRootVersion: 1.0

CHANSI2Unicode

ANSI 문자열을 Unicode 문자열로 변환합니다.

    long CHANSI2Unicode (
      const char*  pChars,                    // string to convert
      long         nChars,                    // number of bytes in string
      wchar_t*     pWChars,                   // wide-char buffer
      long         maxWChars,                 // wide char buffer length
      GSCharCode   charCode = CC_Default        // Character codepage of input
      CHANIS2UnicodeCacheRef*  cache = NULL           // can be used to cache conversion result, if called twice
    );

파라미터

pChars
[in] 변환할 character 문자열을 가리킵니다.
nChars
[in] pChars 파라미터가 가리키는 문자열의 바이트 단위 크기를 지정합니다. 또는 문자열이 null로 끝날 경우 CStringLen이 될 수 있습니다.

만약 이 문자열이 null로 끝나면, 결과로 나오는 wide character 문자열은 null terminator를 갖고 있으며 리턴된 길이는 null terminator를 포함하고 있습니다.

만약 이 파라미터가 양의 정수이면, 이 함수는 정확하게 지정한 바이트들의 수를 처리합니다. 만약 주어진 길이가 null terminator를 포함하지 않는다면, 결과로 나오는 wide character 문자열은 null로 끝나지 않게 되며, 리턴된 길이는 null terminator를 포함하지 않습니다.

pWChars
[out] 변환된 문자열을 받는 버퍼를 가리킵니다.

maxWChars가 null 포인터인 경우에만 NULL이 될 수 있습니다.

maxWChars
[in] pWChars 파라미터가 가리키는 버퍼의 wide character 단위의 크기를 지정합니다. 만약 이 값이 0이면, 이 함수는 wide character 단위의 요청된 버퍼 크기를 리턴합니다. 그리고 pWChars 버퍼를 사용하지 않습니다.

ArchiCAD 7.0 R1/V1에서 이 파라미터에 대한 제한사항을 구현하는 것은 설명을 보십시오.

charCode=CC_Default
[in] 변환을 수행하기 위해 사용하는 코드 페이지를 지정합니다. 더 많은 정보는 GSCharCode를 보십시오. 이 파라미터에 대해서는 CC_UTF8이 유효합니다.
cache
[in/out] 만약 null이 아니면, 2-단계 호출들에 대한 변환 결과를 캐시합니다. 일반적으로 당신은 동일한 ANSI 문자열로 변환을 2번 호출합니다. 먼저 결과의 길이를 계산하기 위해 당신은 버퍼를 할당할 수 있습니다. 그리고 나서 버퍼에 결과를 저장합니다. 길이 계산을 위해 사용된 변환된 문자열을 캐시하기 위해 이 파라미터를 사용할 수 있습니다. 그래서 이것은 변환시에 재사용될 수 있습니다. 만약 maxChars가 0이며 cache가 NULL이 아니면, 이것은 NULL ANIS2UnicodeCacheRef를 가리켜야 합니다. 만약 재활용 가능한 정보가 무엇이라도 존재한다면, 그것은 이 레퍼런스 안에 저장될 것입니다. 레퍼런스는 차후 호출시에 CHANSI2Unicode 또는 CHFreeANSI2UnicodeCache로 해제됩니다. 만약 maxChars가 0이 아니며 cache가 NULL이 아니면, 유효한 케시를 가리킵니다. 변환시 도움을 받기 위해 이 캐시를 사용합니다. cache가 0이 아닌 경우, 이 함수는 pWCharsnWChars 대신 cache 데이터를 사용할 수도 있습니다. cache는 해제될 것이며 사용 후에 0으로 채워질 것입니다.
GS::ANIS2UnicodeCacheRef cache = 0;

len = CHANSI2Unicode (ansiStr, GS::CStringLen, 0, 0, CC_Default, true, &cache);

if (len > 0) { 

  try { 

    p = new GS::uchar_t [len]; 
    res = CHANSI2Unicode (ansiStr, GS::CStringLen, p, len, CC_Default, true, &cache); 

  } catch (std::bad_alloc& ) { 

    if (cache) 
      CHFreeANSI2UnicodeCache (cache); 
  } 
} 

리턴 값

만약 함수가 성공하고 maxWChars가 0이 아니면, 리턴 값은 pWChars가 가리키는 버퍼에 작동된 wide character들의 수입니다.

만약 함수가 성공하고 maxWChars가 0이면, 리턴 값은 변환된 문자열을 받을 수 있는 버퍼에 대한 wide character 단위의 요청된 크기입니다.

만약 함수가 실패하면, 리턴 값은 0입니다. 이 함수는 다음의 경우 실패할 수 있습니다:

- 메모리가 부족함.

- 유효하지 않은 flag/파라미터들.

- Unicode 변환이 존재하지 않음.

- 제공된 버퍼가 너무 작음.

설명

pCharspWChars 포인터들은 동일하거나 중첩되어서는 안 됩니다. 그러한 경우에 대한 결과는 정의되어 있지 않습니다!

표현할 수 없는 문자들은 Windows의 경우 시스템 의존적인 기본 대체 문자로 변환되며, MacOS의 경우 '?'로 변환됩니다.

이 함수는 MacOS의 경우 CoreFoundation String 서비스들을, Windows의 경우 MultiByteToWideChar를 이용하여 구현되었습니다.

요구사항

버전: GSRoot 1.3 또는 이후
헤더: CH.hpp
라이브러리 가져오기: GSRootImp.lib
모듈: GSRoot

참고사항

CHUnicode2ANSI, GSCharCode