본문 바로가기

프로그래밍/ETC...

[WinAPI] 자료형

1. 문자셋의 종류
  - SBCS(Single-Byte Character Set) : 1바이트 문자 표시
      1바이트중 7비트 이용해서 ASCII코드(알파벳,숫자,특수문자)
      남은 1비트를 이용해서 확장, but 한글,일어,한자 등은 표시 불가능
  - MBCS(Multi-Byte Character Set) : 1바이트 이상으로 문자표시
    :1바이트문자는 1바이트로, 2바이트이상 문자는 여러바이트 이용해서 표시
    :영문 1바이트, 한글 2바이트    
  - WBCS(Wide-Byte Character Set) : 유니코드(UNICODE)
    : 1바이트로 충분한 알파벳도 2바이트로 표현
    : 영문 2바이트, 한글 2바이트
    : MBCS의 문제점 해결
     
     
2. TCHAR - MBCS, 유니코드 여부에 따라 자동으로 자료형 변경
  MBCS : char*
  유니코드 : wchar_t
   
3. L 표시자 : 유니코드로 나타내기
   L"abc" : abc를 유니코드로 표시
    
   _T("가나다라") : 유니코드에서는 L을 붙이고 그렇지 않으면 붙이지 않는 매크로
 
    
4. LPSTR / LPCSTR / LPWSTR / LPCWSTR / LPTSTR / LPCTSTR
     
LP : Long Pointer - 과거 16bit 포인터 보다 큰 메모리
     .Net 이상은 64bit pointer, VC++6.0과 이전버전은 32bit pointer
STR : String - char형(wchar_t) 배열로 마지막에 NULL값(종료값, /0)을 가진 형태
C : constant - 상수 : 값을 변경하지 못함
W : Wide char - WSTR -> wchar_t 즉, 유니코드 문자열
T : Transpose(치환) = 개발환경에 따라 MBCS 환경 -> char, 유니코드 환경 -> wchar_t로 치환
 
■ MBCS
LPSTR   = long pointer string           = char *                //1바이트
LPCSTR  = long pointer constant string  = const char *
 
■ 유니코드
LPWSTR  = long pointer wide string          = w_char *          //2바이트
LPCWSTR = long pointer constant wide string = const w_char *
 
■ MBCS & 유니코드
LPTSTR  = long pointer t_string             = tchar * = TCHAR*          //1 or 2바이트
LPCTSTR = long pointer constant t_string    = const tchar * = TCHAR*
 
char    : 1바이트      "~~~"로 사용
w_char  : 2바이트      L"~~~"로 사용
tchar   : 1 or 2바이트 _T"~~~"로 사용
 
-------------------
Windows.h
-------------------
typedef char CHAR;
typedef wchar_t WCHAR;
 
typedef CHAR * LPSTR;
typedef CONST CHAR * LPCSTR;
 
typedef WCHAR * LPWSTR;
typedwf CONST WCHAR * LPCWSTR;
 
#ifdef UNICODE
    typedef WCHAR TCHAR;
    typedef LPWSTR LPSTR;
    typedef LPCWSTR LPCTSTR;
#else
    typedef CHAR TCHAR;
    typedef LPSTR LPTSTR;
    typedef LPCSTR LPCTSTR;
#endif
 
-------------------
응용
-------------------
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)
 
LRESULT = long (4바이트)
CALLBACK = 프로시져 결과값 반환하는 호출규약
HWND = 윈도우 핸들, 윈도우 안의 창과 버튼을 조작하기 위해 만든 구분 값UINT
UINT = unsigned integer (4바이트)
 
WPARAM = Word Parameter = 주로 핸들이나 정수 값  : 자주 쓰이는 정보 (64비트)
LPARAM = Long Parameter = 주로 포인터값               : 추가정보          (64비트)
 
typedef UINT_PTR wparam
typedef _W64 unsigned int UINT_PTR
#define _W64 __W64
 
The __w64 modifier should be specified on any typedefs that change size between 32 bit and 64 bit platforms. For any such type, __w64 should appear only on the 32-bit definition of the typedef
 
 
 
; UINT
; LPCSTR
; LRESULT
; HRESULT
; HWND
; WPARAM
; LPARAM
; REFIID
; void


-------------------------

CONVERT TO AUTOHOTKEY 


HWND Ptr 

HANDLE UInt or Ptr

HMODULE Ptr


DWORD UInt

HCURSOR Ptr

LPCTSTR Str

LPDWORD UInt* or Ptr

LPCVOID Ptr

LPTSTR Ptr

BOOL UInt 4

LONG Int 4

PLARGE_INTEGER Int64*

PULONGLONG UInt64*

ULONGLONG Int64

LPCWSTR WStr

LPWSTR  WStr

int Int

LCID UInt

BOOLEAN UChar

LARGE_INTEGER * Int64*

DWORDLONG UInt64 8


SIZE_T Ptr A_PtrSize = 8 ? 8 : 4

'프로그래밍 > ETC...' 카테고리의 다른 글

[Eclipse] 이클립스 WAS 전환  (0) 2022.04.07
이클립스 정렬  (0) 2022.03.03
[Eclipse] 이클립스 설정  (0) 2018.08.03
HTTP 서버 응답 코드 (Response Code) 정리  (0) 2018.07.27
IaaS, PaaS, SaaS란  (0) 2018.05.23