ct2a 예제

문자열 변환 매크로에는 몇 가지 제한 사항이 있었습니다. 스택에서 메모리를 할당하고 큰 문자열로 스택을 오버플로할 수 있습니다. 함수가 종료될 때 문자열이 해제되었으며 함수 내부의 도입 된 범위가 아닙니다. 그것은 오래된 OLE2ANSI 정의를 사용하고 있었다. 그리고 MSDN에서 _alloca (변환에 사용 된)에 대한 비고를 보면 SEH 또는 C ++ EH 내부에서 사용할 때 제한이 있다고 말합니다. 예를 들어 ATL3 문자열 변환 매크로: 약간의 코딩 규율과 일부 전처리기 매직을 통해 TCHAR 문자열 인수를 예상하는 SetWindowText라는 단일 API가 있는 것처럼 코딩할 수 있습니다. 컴파일 타임에 빌드할 구성 요소의 종류를 지정합니다. 예를 들어 SetWindowText를 호출하고 TCHAR 버퍼를 지정하는 코드를 작성합니다. 구성 요소를 유니코드로 컴파일할 때 SetWindowTextW를 호출합니다. 인수는 wchar_t 버퍼입니다. MBCS/ANSI 구성 요소를 컴파일할 때 SetWindowTextA를 호출합니다. 인수는 char 버퍼입니다. 모든 클래스 이름은 C2 양식을 사용합니다.

예를 들어 CA2W 클래스는 LPSTR을 LPWSTR로 변환합니다. 이름에 C가 있는 경우(첫 번째 Cthat는 “클래스”를 의미하지 않음) 다음 약어에 구성선 수정을 추가합니다. 예를 들어 CT2CW 클래스는 LPTSTR을 LPCWSTR로 변환합니다. 일반 텍스트 데이터 형식 및 함수를 사용하여 일반 텍스트 호환 코드를 작성합니다. 제네릭 텍스트 문자열에 반전및 연결의 예는 다음과 같습니다: 안타깝게도 컴파일러 옵션(예: Windows XP 유니코드 빌드 또는 Windows CE 빌드)의 변경은 이 컨텍스트를 변경할 수 있습니다. 따라서 이전에 문자열을 변환할 필요가 없었던 코드는 변환이 필요하거나 그 반대의 경우도 마찬가지입니다. 컴파일러 옵션을 변경할 때마다 모든 문자열 조작 코드를 다시 작성하지 않으려고 합니다. 따라서 ATL은 텍스트 문자열을 한 문자 집합에서 다른 문자로 변환하고 변환을 호출하는 컨텍스트에 민감한 여러 문자열 변환 매크로를 제공합니다.

운영 체제에 구애받지 않는 코딩 접근 방식은 tchar.h를 비롯하고 _TCHAR 일반 텍스트 데이터 형식을 사용하는 것이 Windows 운영 체제에 다소 덜 연결되어 있기 때문입니다. 그러나 Windows 운영 체제의 특정 버전에 대해 컴파일 타임에 최적화된 텍스트 처리를 통해 구성 요소를 빌드하는 것에 대해 논의합니다. 이것은 우리가 tCHAR를 사용 해야한다고 주장, winnt.h에 정의 된 형식. 또한 TCHAR는 _TCHAR만큼 눈에 거하지 않으며 입력하기가 더 쉽습니다. 대부분의 코드는 이미 windows.h를 통해 winnt.h 헤더 파일을 암시적으로 포함하며 tchar.h를 명시적으로 포함해야 합니다. 이 책의 예제에서는 이 것을 제네릭 텍스트 데이터 형식으로 사용하므로 모든 종류의 좋은 이유가 TCHAR를 사용합니다. 설상가상으로 두 개의 COM 개체는 텍스트 문자열에 대해 두 개의 서로 다른 문자 집합을 선호하는 두 개의 서로 다른 운영 체제를 실행하는 두 개의 서로 다른 컴퓨터에 상주할 수 있습니다. 예를 들어 Visual Basic에서 하나의 COM 개체를 작성하고 Windows XP 운영 체제에서 실행할 수 있습니다. IBM 메인프레임에서 실행되는 C++로 작성된 다른 COM 개체에 텍스트 문자열을 전달할 수 있습니다.