출처 : http://www.nicklib.com/bbs/board.php?bo_table=bbs_source&wr_id=37&page=3
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과 동일
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);