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);
'IT-개발,DB' 카테고리의 다른 글
[VC++/MFC] COM/ATL/STL - BSTR과 VARIANT, string, CComBSTR (0) | 2010.09.30 |
---|---|
[VC++] VC++ 문자 Encoding 방식 (0) | 2010.09.30 |
[VC++/MFC] CString to char * 와 char * to CString (0) | 2010.09.30 |
[VC++] ATL에서 MFC사용, COM관련 확장, MDAC, ADSI사용 (0) | 2010.09.29 |
[ASP.NET] 한글이 포함된 URL로 이동하기 (0) | 2010.09.29 |
댓글