본문 바로가기

Programming/MFC

자료형 정리(문자열)-all

출처 ☆하늘을 보쟈☆ |
원문 http://blog.naver.com/ratmsma/40023135126



================================================================================

LPSTR : char *

LPCSTR : const char *

LPCTSTR : const char * 또는 const WCHAR *



WORD : 보통 2바이트의 부호없는 정수형   (*.word형을 string형으로 바꾸기 string := IntToStr(word); )

DWORD : 4바이트의 부호없는 정수형    DWORD unsigned long

그럼, WORD와, int의 차이점은...

WORD는 4글자 int는 3글자
typedef unsigned short         WORD;    //WORD는 예약어가 아니죠  (typedef는 변수부분)

                                                                                               (cf.define은 전처리 부분)


*.단순참고

char, unsigned char, signed char : 1 byte
short, unsigned short : 2 bytes
int, unsigned int : 4 bytes
long, unsigned long : 4 bytes
float : 4 bytes
double : 8 bytes
long double : 10 bytes

=================================================================================



1. C 자료형
   char(1), short(2), int(4), long(4), float(4), double(8), bool
   문자: char



 
2. Win32 API 자료형
   BYTE(1, unsigned char), WORD(2, unsigned short), UINT(4, unsigned int)
   DWORD(4, unsigned long), LONG(4,long), BOOL
   문자: UCHAR(unsigned char)
   Handle: 대상을 구분하는 4바이트 정수(HWND,HDC...)
 
   MBCS문자(열)  유니코드문자(열)  자동매크로문자(열)
   ------------         -----------------        ------------------
   char   wchar_t    TCHAR
   LPSTR(char*)         LPWSTR(wchar_t*)         LPTSTR
   LPCSTR(const char*)  LPCWSTR(const wchar_t *) LPCTSTR
 
   .LPTSTR과 LPCTSTR를 사용하는 것이 좋음.
   .OLECHAR(wchar_t), LPOLESTR(LPWSTR), LPCOLESTR(LPCWSTR), OLESTR(x) = _T(x)




3. COM 스트링
   BSTR : 문자열 길이를 시작전에 저장하고, 이어서 유티코드문자열을 저장하는 방식
   LPCWSTR -> BSTR : 생성안됨. 생성함수를 이용해야 함.
                     BSTR bstr = sysAllocString(L"HELLO HI"); // 메모리 할당
                                 sysFreeString(bstr);         // 메모리 제거



   VARIANT: 문자열이 들어올때 BSTR과 동일

VARIANT 자료형은 각 개발 환경의 자료형의 차이를 해결하기위하여 제공되는 공용체 이다.


예제) INT nIndex 와 CString strItem이 있다고 가정하고...


// VARIANT 형 선언

VARIANT varIndex, varItem;


// VARIANT type 지정
varIndex.vt = VT_INT;
varItem.vt = VT_BSTR;


// VARIANT 값 할당.
varIndex.intVal = nIndex;
varItem.bstrVal = strItem.AllocSysString();// CString을 bstr로 변환하는 함수


// VARIANT 인자를 사용하여 함수 호출




 

4. CRT(c runtime library)지원 스트링 클래스 (#include "comdef.h")
   4-1. _bstr_t
        :BSTR 랩퍼 클래스, 메모리 할당/제거를 자동으로 수행
     
        . LPCSTR, LPCWSTR  -> _bstr_t
          :_bstr bstr = "hello hi";
        . _bstr_t -> LPCSTR, LPCWSTR
          : LPCSTR psz1 = (LPCSTR)bs1;
        . _bstr_t -> BSTR
          : 형변환 안됨. 함수이용
            BSTR bstr = bs1.copy();
            sysFreeString(bstr); // BSTR은 사용후 메모리 해제를 해야함.

   4-2. _variant_t
        :VARIANT 랩퍼 클래스, 메모리 할당/제거 자동 수행
       
        . LPCSTR, LPCWSTR -> _variant_t
          : _variant_t v1 = "hello hi";
        . _variant_t -> _bstr_t -> LPCSTR,LPCWSTR
          : LPCSTR psz1 = (LPCSTR)(_bstr_t)v1;




5. ATL 지원 스트링클래스
   5-1 CComBSTR : BSTR랩퍼클래스, 메모리할당/제거 자동 수행
      . LPCSTR, LPCWSTR -> CComBSTR
        CComBSTR bs1 = "hello hi";
      . CComBSTR -> BSTR -> LPCWSTR
        BSTR bs = (BSTR)bs1;
      . BSTR -> CComBSTR
        CComBSTR bs2; bs2.Attach(W2BSTR(L"hello hi");

   5-2 CComVariant: VARIANT랩퍼클래스, 메모리할당/제거 자동 수행
      . LPCSTR, LPCWSTR -> CComVariant
        CComVariant bs1 = "hello hi";
      . CComVariant -> CComBSTR -> BSTR -> LPCWSTR
        CComBSTR bs = bs1.bstrVal;



6. STL 스트링
   6-1 string
       . LPCSTR -> string
         string str = "hello hi";
       . string -> LPCSTR (형변환 안됨. 함수 이용)
         LPCSTR psz = str.c_str();
   6-2 wstring
       . LPCWSTR -> wstring
         wstring str = "hello hi";
       . wstring -> LPCWSTR
         LPCWSTR psz = str.c_str();



7. MFC 스트링
   . LPCSTR, LPCWSTR -> CString
     CString str = "hello hi";
   . CString -> LPCTSTR
     1. LPCTSTR lpsz = (LPCTSTR)str;
     2. LPTSTR lptsz = str.getBuffer(0), str.ReleaseBuffer(); (올바른 사용)
     3. LPTSTR lptsz = (LPTSTR)(LPCTSTR)str; (잘못된 표현)
     4. CString -> BSTR
        BSTR bstr = str.AllocSysString(); sysFreeString(bstr);



8. VC7 스트링
   String: .Net에서 새로 정의한 스트링 클래스
          String* s1 = S"hello hi";
          CString s2(s1);
   

9. ETC

   1. BSTR --> LPCSTR
      USES_CONVERSION;
      LPCSTR lpaszTemp = OLE2CA(bstrValue);

   2. LPCSTR --> BSTR
      USES_CONVERSION;
      BSTR bstrTemp = ::SysAllocString(A2COLE(lpaszValue));

   3. CString --> LPCSTR
      1) ANSI 버전
          LPCSTR lpaszTemp = (LPCSTR) strValue;
      2) UNICODE 버전
          USES_CONVERSION;
          LPCSTR lpaszTemp = T2CA((LPCTSTR) strValue);

   4. LPCSTR --> CString
      1) ANSI 버전
         CString strTemp = lpaszValue;
      2) UNICODE 버전
          USES_CONVERSION;
          CString strTemp = A2CT(lpaszValue);


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


Windows Data Types

The data types supported by Microsoft® Windows® are used to define function return values, function and message parameters, and structure members. They define the size and meaning of these elements.

The following table contains the following types: character, integer, Boolean, pointer, and handle. The character, integer, and Boolean types are common to most C compilers. Most of the pointer-type names begin with a prefix ofPorLP. Handles refer to a resource that has been loaded into memory. For more information about handling 64-bit integers, seeLarge Integers.

Data Types

Value Meaning
ATOM Atom. For more information, seeAtoms.
BOOL Boolean variable (should be TRUE or FALSE).
BOOLEAN Boolean variable (should be TRUE or FALSE).
BYTE Byte (8 bits).
CALLBACK Calling convention for callback functions.
CHAR 8-bit Windows (ANSI) character. For more information, seeCharacter Sets Used By Fonts.
COLORREF Red, green, blue (RGB) color value (32 bits). SeeCOLORREFfor information on this type.
CONST Variable whose value is to remain constant during execution.
CRITICAL_SECTION Critical-section object. For more information, seeCritical Section Objects.
DWORD 32-bit unsigned integer.
DWORD_PTR Unsigned long type for pointer precision. Use when casting a pointer to a long type to perform pointer arithmetic. (Also commonly used for general 32-bit parameters that have been extended to 64 bits in 64-bit Windows. )
DWORD32 32-bit unsigned integer.
DWORD64 64-bit unsigned integer.
FLOAT Floating-point variable.
HACCEL Handle to anaccelerator table.
HANDLE Handle to an object.
HBITMAP Handle to abitmap.
HBRUSH Handle to abrush.
HCONV Handle to a dynamic data exchange (DDE) conversation.
HCONVLIST Handle to a DDE conversation list.
HCURSOR Handle to acursor.
HDC Handle to adevice context(DC).
HDDEDATA Handle to DDE data.
HDESK Handle to adesktop.
HDROP Handle to an internal drop structure.
HDWP Handle to a deferred window position structure.
HENHMETAFILE Handle to anenhanced metafile.
HFILE Handle to a file opened byOpenFile, notCreateFile.
HFONT Handle to afont.
HGDIOBJ Handle to a GDI object.
HGLOBAL Handle to a global memory block.
HHOOK Handle to ahook.
HICON Handle to anicon.
HIMAGELIST Handle to an image list.
HIMC Handle to input context.
HINSTANCE Handle to an instance.
HKEY Handle to a registry key.
HKL Input locale identifier.
HLOCAL Handle to a local memory block.
HMENU Handle to amenu.
HMETAFILE Handle to ametafile.
HMODULE Handle to a module. The value is the base address of the module.
HMONITOR Handle to a display monitor.
HPALETTE Handle to apalette.
HPEN Handle to apen.
HRGN Handle to aregion.
HRSRC Handle to a resource.
HSZ Handle to a DDE string.
HWINSTA Handle to awindow station.
HWND Handle to awindow.
INT 32-bit signed integer.
INT_PTR Signed integral type for pointer precision. Use when casting a pointer to an integer to perform pointer arithmetic.
INT32 32-bit signed integer.
INT64 64-bit signed integer.
LANGID Language identifier. For more information, seeLocales.
LCID Locale identifier. For more information, seeLocales.
LCTYPE Locale information type. For a list, seeLocale and Language Information.
LONG 32-bit signed integer.
LONG_PTR Signed long type for pointer precision. Use when casting a pointer to a long to perform pointer arithmetic.
LONG32 32-bit signed integer.
LONG64 64-bit signed integer.
LONGLONG 64-bit signed integer.
LPARAM Message parameter.
LPBOOL Pointer to aBOOL.
LPBYTE Pointer to aBYTE.
LPCOLORREF Pointer to aCOLORREFvalue.
LPCRITICAL_SECTION Pointer to aCRITICAL_SECTION.
LPCSTR Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters. For more information, seeCharacter Sets Used By Fonts.
LPCTSTR AnLPCWSTRifUNICODEis defined, anLPCTSTRotherwise.
LPCVOID Pointer to a constant of any type.
LPCWSTR Pointer to a constant null-terminated string of 16-bit Unicode characters. For more information, seeCharacter Sets Used By Fonts.
LPDWORD Pointer to aDWORD.
LPHANDLE Pointer to aHANDLE.
LPINT Pointer to anINT.
LPLONG Pointer to aLONG.
LPSTR Pointer to a null-terminated string of 8-bit Windows (ANSI) characters. For more information, seeCharacter Sets Used By Fonts.
LPTSTR AnLPWSTRifUNICODEis defined, anLPSTRotherwise.
LPVOID Pointer to any type.
LPWORD Pointer to aWORD.
LPWSTR Pointer to a null-terminated string of 16-bit Unicode characters. For more information, seeCharacter Sets Used By Fonts.
LRESULT Signed result of message processing.
LUID Locally unique identifier.
PBOOL Pointer to aBOOL.
PBOOLEAN Pointer to aBOOL.
PBYTE Pointer to aBYTE.
PCHAR Pointer to aCHAR.
PCRITICAL_SECTION Pointer to aCRITICAL_SECTION.
PCSTR Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters. For more information, seeCharacter Sets Used By Fonts.
PCTSTR APCWSTRifUNICODEis defined, aPCSTRotherwise.
PCWCH Pointer to a constantWCHAR.
PCWSTR Pointer to a constant null-terminated string of 16-bit Unicode characters. For more information, seeCharacter Sets Used By Fonts.
PDWORD Pointer to aDWORD.
PFLOAT Pointer to aFLOAT.
PHANDLE Pointer to aHANDLE.
PHKEY Pointer to anHKEY.
PINT Pointer to anINT.
PLCID Pointer to anLCID.
PLONG Pointer to aLONG.
PLUID Pointer to aLUID.
POINTER_32 32-bit pointer. On a 32-bit system, this is a native pointer. On a 64-bit system, this is a truncated 64-bit pointer.
POINTER_64 64-bit pointer. On a 64-bit system, this is a native pointer. On a 32-bit system, this is a sign-extended 32-bit pointer.
PSHORT Pointer to aSHORT.
PSTR Pointer to a null-terminated string of 8-bit Windows (ANSI) characters. For more information, seeCharacter Sets Used By Fonts.
PTBYTE Pointer to aTBYTE.
PTCHAR Pointer to aTCHAR.
PTSTR PWSTRifUNICODEis defined, aPSTRotherwise.
PTBYTE Pointer to aTBYTE.
PTCHAR Pointer to aTCHAR.
PTSTR APWSTRifUNICODEis defined, aPSTRotherwise.
PUCHAR Pointer to aUCHAR.
PUINT Pointer to aUINT.
PULONG Pointer to aULONG.
PUSHORT Pointer to aUSHORT.
PVOID Pointer to any type.
PWCHAR Pointer to aWCHAR.
PWORD Pointer to aWORD.
PWSTR Pointer to a null-terminated string of 16-bit Unicode characters. For more information, seeCharacter Sets Used By Fonts.
REGSAM Security access mask for registry key.
SC_HANDLE Handle to a service control manager database. For more information, seeSCM Handles.
SC_LOCK Handle to a service control manager database lock. For more information, seeSCM Handles.
SERVICE_STATUS_HANDLE Handle to a service status value. For more information, seeSCM Handles.
SHORT Short integer (16 bits).
SIZE_T The maximum number of bytes to which a pointer can point. Use for a count that must span the full range of a pointer.
SSIZE_ T SignedSIZE_T.
TBYTE AWCHARifUNICODEis defined, aCHARotherwise.
TCHAR AWCHARifUNICODEis defined, aCHARotherwise.
UCHAR UnsignedCHAR.
UINT UnsignedINT.
UINT_PTR UnsignedINT_PTR.
UINT32 UnsignedINT32.
UINT64 UnsignedINT64.
ULONG UnsignedLONG.
ULONG_PTR UnsignedLONG_PTR.
ULONG32 UnsignedLONG32.
ULONG64 UnsignedLONG64.
ULONGLONG 64-bit unsigned integer.
UNSIGNED Unsigned attribute.
USHORT UnsignedSHORT.
VOID Any type.
WCHAR 16-bit Unicode character. For more information, seeCharacter Sets Used By Fonts.
WINAPI Calling convention for system functions.
WORD 16-bit unsigned integer.
WPARAM Message parameter.
<!-- Info Task Footer -->

Platform SDK Release:February 2003


*.

기존 데이터형으로 조합이 가능한 형을 새로운 데이터형으로 선언하여 사용하는 이유는 단순히 편하게 사용하자는 의도만 있는 것은 아니다. 윈도우즈가 항상 IBM 컴퓨터에서만 실행되라는 법은 없으며 언젠가는 다른 시스템으로 이식될 가능성도 있을 수 있는데 그럴 경우 소스 차원의 호환성을 확보하기 위해 이런 데이터형을 사용한다. 알기 쉽게 예를 든다면 WORD형이 현재는 2바이트의 부호없는 정수형이지만 팬티엄 이후 686이나 786쯤에는 4바이트로 확장될지도 모른다. 설사 그렇더라도 소스는 수정할 필요없이 헤더 파일에서 WORD형의 형 정의만 바꾸어 주고 소스를 다시 컴파일하면 호환성에 문제가 없다.