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 of P or LP. Handles refer to a resource that has been loaded into memory. For more information about handling 64-bit integers, see Large Integers.
Data Types
Value | Meaning |
---|---|
ATOM | Atom. For more information, see |
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, see |
COLORREF | Red, green, blue (RGB) color value (32 bits). See COLORREF for information on this type. |
CONST | Variable whose value is to remain constant during execution. |
CRITICAL_SECTION | Critical-section object. For more information, see |
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 an |
HANDLE | Handle to an object. |
HBITMAP | Handle to a |
HBRUSH | Handle to a |
HCONV | Handle to a dynamic data exchange (DDE) conversation. |
HCONVLIST | Handle to a DDE conversation list. |
HCURSOR | Handle to a |
HDC | Handle to a |
HDDEDATA | Handle to DDE data. |
HDESK | Handle to a |
HDROP | Handle to an internal drop structure. |
HDWP | Handle to a deferred window position structure. |
HENHMETAFILE | Handle to an |
HFILE | Handle to a file opened by |
HFONT | Handle to a |
HGDIOBJ | Handle to a GDI object. |
HGLOBAL | Handle to a global memory block. |
HHOOK | Handle to a |
HICON | Handle to an |
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 a |
HMETAFILE | Handle to a |
HMODULE | Handle to a module. The value is the base address of the module. |
HMONITOR | Handle to a display monitor. |
HPALETTE | Handle to a |
HPEN | Handle to a |
HRGN | Handle to a |
HRSRC | Handle to a resource. |
HSZ | Handle to a DDE string. |
HWINSTA | Handle to a |
HWND | Handle to a |
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, see |
LCID | Locale identifier. For more information, see |
LCTYPE | Locale information type. For a list, see |
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 a BOOL. |
LPBYTE | Pointer to a BYTE. |
LPCOLORREF | Pointer to a COLORREF value. |
LPCRITICAL_SECTION | Pointer to a CRITICAL_SECTION. |
LPCSTR | Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters. For more information, see |
LPCTSTR | An LPCWSTR if |
LPCVOID | Pointer to a constant of any type. |
LPCWSTR | Pointer to a constant null-terminated string of 16-bit Unicode characters. For more information, see |
LPDWORD | Pointer to a DWORD. |
LPHANDLE | Pointer to a HANDLE. |
LPINT | Pointer to an INT. |
LPLONG | Pointer to a LONG. |
LPSTR | Pointer to a null-terminated string of 8-bit Windows (ANSI) characters. For more information, see |
LPTSTR | An LPWSTR if |
LPVOID | Pointer to any type. |
LPWORD | Pointer to a WORD. |
LPWSTR | Pointer to a null-terminated string of 16-bit Unicode characters. For more information, see |
LRESULT | Signed result of message processing. |
LUID | Locally unique identifier. |
PBOOL | Pointer to a BOOL. |
PBOOLEAN | Pointer to a BOOL. |
PBYTE | Pointer to a BYTE. |
PCHAR | Pointer to a CHAR. |
PCRITICAL_SECTION | Pointer to a CRITICAL_SECTION. |
PCSTR | Pointer to a constant null-terminated string of 8-bit Windows (ANSI) characters. For more information, see |
PCTSTR | A PCWSTR if |
PCWCH | Pointer to a constant WCHAR. |
PCWSTR | Pointer to a constant null-terminated string of 16-bit Unicode characters. For more information, see |
PDWORD | Pointer to a DWORD. |
PFLOAT | Pointer to a FLOAT. |
PHANDLE | Pointer to a HANDLE. |
PHKEY | Pointer to an HKEY. |
PINT | Pointer to an INT. |
PLCID | Pointer to an LCID. |
PLONG | Pointer to a LONG. |
PLUID | Pointer to a LUID. |
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 a SHORT. |
PSTR | Pointer to a null-terminated string of 8-bit Windows (ANSI) characters. For more information, see |
PTBYTE | Pointer to a TBYTE. |
PTCHAR | Pointer to a TCHAR. |
PTSTR | PWSTR if |
PTBYTE | Pointer to a TBYTE. |
PTCHAR | Pointer to a TCHAR. |
PTSTR | A PWSTR if |
PUCHAR | Pointer to a UCHAR. |
PUINT | Pointer to a UINT. |
PULONG | Pointer to a ULONG. |
PUSHORT | Pointer to a USHORT. |
PVOID | Pointer to any type. |
PWCHAR | Pointer to a WCHAR. |
PWORD | Pointer to a WORD. |
PWSTR | Pointer to a null-terminated string of 16-bit Unicode characters. For more information, see |
REGSAM | Security access mask for registry key. |
SC_HANDLE | Handle to a service control manager database. For more information, see |
SC_LOCK | Handle to a service control manager database lock. For more information, see |
SERVICE_STATUS_HANDLE | Handle to a service status value. For more information, see |
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 | Signed SIZE_T. |
TBYTE | A WCHAR if |
TCHAR | A WCHAR if |
UCHAR | Unsigned CHAR. |
UINT | Unsigned INT. |
UINT_PTR | Unsigned INT_PTR. |
UINT32 | Unsigned INT32. |
UINT64 | Unsigned INT64. |
ULONG | Unsigned LONG. |
ULONG_PTR | Unsigned LONG_PTR. |
ULONG32 | Unsigned LONG32. |
ULONG64 | Unsigned LONG64. |
ULONGLONG | 64-bit unsigned integer. |
UNSIGNED | Unsigned attribute. |
USHORT | Unsigned SHORT. |
VOID | Any type. |
WCHAR | 16-bit Unicode character. For more information, see |
WINAPI | Calling convention for system functions. |
WORD | 16-bit unsigned integer. |
WPARAM | Message parameter. |
<!-- Info Task Footer -->
*.
기존 데이터형으로 조합이 가능한 형을 새로운 데이터형으로 선언하여 사용하는 이유는 단순히 편하게 사용하자는 의도만 있는 것은 아니다. 윈도우즈가 항상 IBM 컴퓨터에서만 실행되라는 법은 없으며 언젠가는 다른 시스템으로 이식될 가능성도 있을 수 있는데 그럴 경우 소스 차원의 호환성을 확보하기 위해 이런 데이터형을 사용한다. 알기 쉽게 예를 든다면 WORD형이 현재는 2바이트의 부호없는 정수형이지만 팬티엄 이후 686이나 786쯤에는 4바이트로 확장될지도 모른다. 설사 그렇더라도 소스는 수정할 필요없이 헤더 파일에서 WORD형의 형 정의만 바꾸어 주고 소스를 다시 컴파일하면 호환성에 문제가 없다.
[출처] 자료형 정리(문자열)-all |작성자 으짜라고
'MFC' 카테고리의 다른 글
[MFC] Excel Automation - release variant unknown type 엑셀 자동화 오류. (0) | 2014.03.19 |
---|---|
[MFC] CString 클래스 및 멤버함수 (0) | 2014.03.05 |
[MFC] char*, wchar_t*, _bstr_t, CComBSTR, CString, basic_string, System.String 변환 (0) | 2014.02.28 |
[MFC] 출력 폰트 키우기 (0) | 2014.02.28 |
[MFC] CString To TCHAR 변환하기 (0) | 2014.02.27 |