이 브라우저는 지원되지 않습니다.

사이트를 사용하여 브라우저를 업데이트해야 합니다.

최신 버전의 Internet Explorer를 업데이트하세요.

정보: DBCS 호환 응용 프로그램 쓰기 위한 팁

중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

75439
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
3.00 3.10 WINDOWS kbprg
요약
더블바이트 문자 집합 (DBCS) 사용하는 시스템의 문자열 연산을 싱글 바이트 문자 시스템에서 약간 다릅니다. 이 문서에서는 DBCS 시스템 싱글바이트 시스템에 대해 작성된 응용 프로그램 포트 데 필요한 작업 시간을 줄이기 위한 지침을 제공합니다.
추가 정보
더블바이트 문자 집합 일부 한 바이트 필요하지만 일부 문자를 두 바이트 필요합니다. "선행 바이트" 와 일부 문자를 지정하는 의해 문자가 두 가지 유형의 언어 드라이버 구별할 수 있습니다. 선행 바이트가 더블바이트 문자 (DBC) 만들려면 다른 바이트가 ("꼬리 바이트") 와야 합니다. 선행 바이트가 집합을 각 언어마다 다릅니다. 선행 바이트가 항상 확장 문자가 보장되는; 7-비트 ASCII 문자가 선행 바이트가 될 수 있습니다. 꼬리 바이트 NULL 바이트 제외한 모든 바이트 수 있습니다. 문자열 끝에 문자열의 첫 번째 NULL 바이트를 항상 정의됩니다. 선행 바이트가 법적 꼬리 바이트, 컨텍스트에서 바이트가 선행 바이트로 역할을 하는 경우 알 수 있는 유일한 방법은 있습니다.

Windows 소프트웨어 개발 키트 (SDK) 버전 3.0 DBCs 포함된 문자열을 통해 이동하기 위한 두 가지 기능이 포함되어 있습니다: AnsiNext()AnsiPrev(). 이를 통해 문자열 이전 문자로 시작되는 위치를 확인하려면 처음부터 실행해야 하므로 시간이 비싼 호출 AnsiPrev() 함수입니다. 문자열 끝에 대신 시작 문자를 검색하는 데 가장 적합합니다.

Windows SDK 버전 3.1 바이트가 선행 바이트가 BE 수는 경우에만 TRUE를 반환하는 IsDBCSLeadByte() 함수를 포함합니다. 이 함수는 char 때문에 매개 변수, 바이트 (이렇게 컨텍스트 필요합니다) 바이트인지 IS 경우 보고할 수 없습니다.

최대한 빨리 실행할 아닌 DBCS 코드를 만들 수 소스 파일 "# ifdef DBCS" 만 DBCS 코드를 주위에 사용할 및 개체 (OBJ) 파일의 두 버전을 컴파일할 수 있습니다. 예를 들어,:
   #ifdef DBCS     for (pszTemp = szString; *pszTemp; pszTemp = AnsiNext(pszTemp))   #else     for (pszTemp = szString; *pszTemp; ++pszTemp)   #endif   ...				
DBCS 정의되지 않은 경우 코드를 보다 읽기 쉽게 하려면, 응용 프로그램 AnsiNext()AnsiPrev() 함수에 매크로를 정의할 수:
   #ifndef DBCS   #define AnsiNext(x) ((x)+1)   #define AnsiPrev(y, x) ((x)-1)   #ifdef WIN31   #define IsDBCSLeadByte(x) (FALSE)   #endif   #endif				
이러한 정의를 사용하여 모든 코드를 DBCS 작성할 수 있습니다. AnsiNext() 함수를 사용하여 문자열의 끝을 지나 이동합니다 및 매크로가 됩니다 동안 AnsiPrev() 함수를 사용하여 문자열의 시작을 지나 이동 유의하십시오. 또한 AnsiPrev() 매크로 "y" 매개 변수는 무시됩니다 때문에 일부 코드 정의된 DBCS 사용하지 않고 컴파일할 때 다른 결과를 제공합니다. 다음 코드에서는 이 전세계적으로 예입니다:
   pszEnd = AnsiPrev(++pszStart, pszEnd);				
다음 코드에서는 파일 오프셋의 전체 경로 이름을 찾는 방법을 보여 줍니다:
   LPSTR GetFilePtr(LPSTR lpszFullPath)   {    LPSTR lpszFileName;    for (lpszFileName = lpszFullPath; *lpszFullPath;               lpszFullPath = AnsiNext(lpszFullPath))        if (*lpszFullPath == ':' || *lpszFullPath == '\\')            lpszFileName = lpszFullPath + 1;    return lpszFileName;   }				
있는 참고 ': '및' \\ ' 선행 바이트가 되도록 보장됩니다. 최종 AnsiPrev() 함수를 사용하지 않는 것이 아니라 문자열의 처음부터 검색을 시작했습니다.

제한된 크기 버퍼 문자열 복사 보여 주는 코드입니다. 문자열의 선행 바이트가 끝 하면 참고.
   int StrCpyN(LPSTR lpszDst, LPSTR lpszSrc, unsigned int wLen)   {    LPSTR lpEnd;    char cTemp;    // account for the terminating NULL    --wLen;    for (lpEnd = lpszSrc; *lpEnd && (lpEnd - lpszSrc) < wLen;               lpEnd = AnsiNext(lpEnd))        ;  // scan to the end of string, or wLen bytes    // The following can happen only if lpszSrc[wLen-1] is a lead    // byte, in which case do not include the previous DBC in the copy.    if (lpEnd - lpszSrc > wLen)        lpEnd -= 2;    // Terminate the source string and call lstrcpy.    cTemp = *lpEnd;    *lpEnd = '\0';    lstrcpy(lpszDst, lpszSrc);    *lpEnd = cTemp;   }				
3.00 3.10

경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 75439 - 마지막 검토: 01/29/2014 07:20:09 - 수정: 1.1

  • Microsoft Windows Software Development Kit 3.1
  • kbnosurvey kbarchive kbmt kb16bitonly kbinfo KB75439 KbMtko
피드백