LPSTR, LPCSTR, LPTSTR, LPCTSTR , LPWSTR, LPCWSTR
출처 - http://egloos.zum.com/pelican7/v/1768951
http://blog.naver.com/kkan22/80050248215
윈도우서는 string 처리를 위해서 char* 형을 그대로 쓰기보다는 위와 같은 표현으로 대치해 사용함으로써,
개발의 편의성을 돕고있다고 합니다.
LP는 Long Pointer의 약어로 옛 윈도우의 유산입니다.
:과거 Windows 3.1시절에는 포인터는 모두 16bit였고, 24bit 메모리를 long Pointer라는 것을 통해 extended memory 라는 이름으로 관리했었습니다. (현재 .Net에서는 64bit pointer를 , 그 이전에는 32bit pointer를 나타냅니다.)
C는 constannt 라는 의미입니다.
W는 wide char(UNICODE)를 나타냅니다.
STR은 string자료가 될 것이라는 뜻으로 내부적으로는 char형 배열에 NULL값 종료를 의미합니다.
LPSTR = long pointer string = char*
LPCSTR = long pointer constant sting = const char*
LPWSTR = long ponter wide string = w_char*
LPCWSTR = long pointer constant wide string = const w_char*
char는 1 Byte이고 wide char는 2 Byte로 포인터 연산을 많이 하는 c/c++ 코드에 호환성 문제가 발생하게 되어
컴파일러가 언어의 옵션을 보고 환경에 맞게 동작하는 코드를 작성 할 수 있는 새로운 변수 모양의 Macro를 선언하게 되었습니다.
바로 TCHAR , t_char라는 변수로 , 운영체제가 Multi_byte이면 char형으로 , Unicode 환경이면, w_char , wide char형으로 변경됩니다.
LPTSTR = long pointer t_string = char*
LPCTSTR = long pointer constant t_sting = const char*
함수의 인자가 char* 인곳에 const char* 형을 넣으면 컴파일 오유가 발생하기 때문에 (LPSTR)을 한번 더 앞에 써주어 강제 type casting을 한 것 입니다.
// 추가
Unicod와 MBCS/ANSI에 따라서 따로 구분해서 프로그램할 필요가 없도록 하기위해서 사용하는 것이 TCHAR 매크로입니다. 즉, TCHAR 타입이 _UNICODE가 정의된 경우에는 wchar_t 타입으로 작동하고, _MBCS가 정의된 경우에는 char 타입으로 작동합니다. (TCHAR 을 나타는 매크로가 _T 이다. (한문자 _T(' '), 문장 _T(" "))
#include <tchar.h>
#define _UNICODE // ==> TCHAR를 wchar_t 형으로 대치
#define _MBCS // ==> TCHAR를 char 형으로 대치 (default)
[ 타입 정의 ]
#ifdef UNICODE
typedef wchar_t TCHAR; // 2byte
#else
typedef char TCHAR; // 1byte
#endif
[ 함수 정의 ]
#ifdef UNICODE
typedef SetWindowTextW SetWindowText;
#else
typedef SetWindowTextA SetWindowText;
#endif
'프로그래밍 관련 > Win API' 카테고리의 다른 글
WIndows API - #7. 키보드, 마우스 입력, 좌표 (InvalidateRect) (0) | 2015.09.01 |
---|---|
WIndows API - #6. API 문자열 출력 함수들에 관하여.. (0) | 2015.08.24 |
WIndows API - #4. 윈도우창 출력 함수 자세히보기(2) (0) | 2015.08.23 |
WIndows API - #4. 윈도우창 출력 함수 자세히보기(1) (0) | 2015.08.23 |
WIndows API - #3. 윈도우창에 Hello World 출력하기(2) (0) | 2015.08.21 |