Programming2011. 12. 6. 12:56

1. C 자료형


    char (1) , short (2) , int (4) , long (4), float (4) , double (8) , bool 

    문자 : char

    char szName[20] = "kim";


 

2. WIN API 자료형

 

    BYTE (1,unsigned char) , WORD (2,unsigned short) , UNIT (4, unsigned int) , 

    DWORD (4,unsigned long) , LONG (4,long) , BOOL

    문자 : UCHAR (unsigned char)

    핸들 : 대상을 구분하는 4바이트 정수(HWND, HDC 등)

 

    MBCS문자(열)                 유니코드문자(열)           자동매크로문자(열)

    char                                     wchar_t                              TCHAR

    LPSTR(char*)                    LPWSTR(wchar_t*)        LPTSTR

    LPCSTR(const char*)      LPCWSTR                         LPCTSTR

 

    (참조1) 문자열에 대해 그냥 습관적으로 LPTSTR 또는 LPCTSTR 를 써라

    (참조2) 헝가리안명명법 

                   w(WORD) , dw(DWORD) , i(int) , b(BOOL) , ch(문자) , sz(문자열) , h(핸들)

                   cb(바이트수) , a(배열)

 (참조3) OLECHAR(wchar_t), LPOLESTR(LPWSTR), LPCOLESTR(LPCWSTR), OLESTR(x) = _T(x)


 

3. COM 스트링


    BSTR : 문자열길이를 시작전에 저장하고, 이어서 유니코드문자열을 저장하는 방식

                  1> LPCWSTR ->  BSTR : 생성안됨. 생성함수를 이용해야함

                               BSTR bstr = sysAllocString(L"Hi Bob"); // 메모리할당

                              sysFreeString(bstr); // 메모리제거

                  2> BSTR  ->  LPCWSTR : 형변환 가능

 

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

 

4. CRT(c runtime library) 지원 스트링클래스

 

    _bstr_t : BSTR랩퍼클래스, 메모리할당/제거를 자동으로 수행

                  1> LPCSTR, LPCWSTR  -> _bstr_t 

                               _bstr_t bs1 = "char string";  // 생성

                  2> _bstr_t  ->  LPCSTR, LPCWSTR 

                               LPCSTR psz1 = (LPCSTR)bs1; // 형변환

                  3> _bstr_t  ->  BSTR : 형변환안됨. 함수이용

                               BSTR bstr = bs1.copy();

                               sysFreeString(bstr);  // BSTR은 사용후 메모리해제를 해야하는 불편이있음..

//참고 : _com_util에서 지원해주는 컨버트 함수

//_com_util::ConvertStringToBSTR()

//_com_util::ConvertBSTRToString()

    _variant_t : VARIANT랩퍼클래스, 메모리할당/제거를 자동으로 수행

                  1> LPCSTR, LPCWSTR  -> _variant_t 

                               _variant_t v1 = "char string"; // 생성

                  2> _variant_t  -> _bstr_t  ->  LPCSTR, LPCWSTR 

                               LPCSTR psz1 = (LPCSTR)(_bstr_t)v1;  //형변환

 

5. ATL 지원 스트링클래스

 

    CComBSTR : BSTR랩퍼클래스, 메모리할당/제거를 자동으로 수행

                  1> LPCSTR, LPCWSTR  ->  CComBSTR 

                               CComBSTR bs1 = "char string"; // 생성

                  2> CComBSTR  ->  BSTR   -> LPCWSTR

                               BSTR bstr = (BSTR)bs1;  // 형변환

 

                  (참조) BSTR -> CComBSTR 

                               CComBSTR bs2; bs2.Attach(W2BSTR(L"Bob"))

                              

    CComVariant : VARIANT랩퍼클래스, 메모리할당/제거를 자동으로 수행

                  1> LPCSTR, LPCWSTR  ->  CComVariant 

                               CComVariant bs1 = "char string"; // 생성

                  2> CComVariant  ->  CComBSTR   ->  BSTR   -> LPCWSTR

                               CComBSTR bs2 = bs1.bstrVal;

 

6. STL 스트링

 

    string 

                  1> LPCSTR -> string

                                string  str = "char string"; //생성

                  2> string -> LPCSTR : 형변환 안됨. 함수이용 

                                LPCSTR psz = str.c_str();

    wstring

                   1> LPCWSTR -> wstring

                                wstring  str = "wide char string"; //생성

                  2> wstring -> LPCWSTR : 형변환 안됨. 함수이용 

                                LPCWSTR psz = str.c_str();

 

7. MFC 스트링

 

    CString

                  1> LPCSTR, LPCWSTR  ->  CString 

                                CString  str = "char string"; //생성

                  2> CString  -> LPCTSTR :

                                LPCTSTR  lpsz = (LPCTSTR)str; //형변환

 

                  (참고)  CString  -> LPTSTR :  함수이용

                               LPTSTR lptsz  = str.GetBuffer(0); str.ReleaseBuffer(); //  올바른 사용

                               LPTSTR lptsz  = (LPTSTR)(LPCTSTR)str  //  잘못된 사용

                               CString  -> BSTR  

                               BSTR bstr = str.AllocSysString(); sysFreeString(bstr)

 

8. VC7 스트링

 

    String : .NET에서 새로 정의한 스트링 클래스

                               String* s1 = S"this is nice"; // 생성

                               CString s2(s1); // 형변환


 /////////////////////////////////////////////////////////////////////////////////////
1byte char문자와 2byte wide char 문자열 변환

 /////////////////////////////////////////////////////////////////////////////////////
 

1. wsprintf 사용

 /////////////////////////////////////////////////////////////////////////////////////

 char sz[10] = "가나다라마";

 TCHAR szw[10] = {0,}


 wsprintf(szw, "%s", sz); 

 Windows.h

 http://msdn.microsoft.com/en-us/library/ms647550(VS.85).aspx

 /////////////////////////////////////////////////////////////////////////////////////



2. mbstowcs, wcstombs의 이용

/////////////////////////////////////////////////////////////////////////////////////

mbstowcs ; 

<stdlib.h>

http://msdn.microsoft.com/en-us/library/k1f9b8cy(VS.80).aspx


wcstombs ; 

http://msdn.microsoft.com/en-us/library/5d7tc9zw(VS.80).aspx

/////////////////////////////////////////////////////////////////////////////////////


3. MultiByteToWideChar, WideCharToMultiByte의 이용

/////////////////////////////////////////////////////////////////////////////////////

MultiByteToWideChar ;

<windows.h>

http://msdn.microsoft.com/en-us/library/dd319072(VS.85).aspx


WideCharToMultiByte ; 

http://msdn.microsoft.com/en-us/library/dd374130(VS.85).aspx

/////////////////////////////////////////////////////////////////////////////////////


4. CString과 CStringW의 이용

 /////////////////////////////////////////////////////////////////////////////////////

  char sz[10] = "가나다라마";

  TCHAR szw[10] = L"가나다라마";


  //char -> wchar

  CStringW strw(sz);


  //wchar -> char

  CString str(szw);

 /////////////////////////////////////////////////////////////////////////////////////


5. USES_CONVERSION, A2W, W2A의 이용

 /////////////////////////////////////////////////////////////////////////////////////

  char sz[10] = "가나다라마";

  TCHAR szw[10] = L"가나다라마";


  USES_CONVERSION;

  // char -> wchar

  WCHAR* w = A2W( sz );


  // wchar -> char

  CHAR* c = W2A( szw );

/////////////////////////////////////////////////////////////////////////////////////


'Programming' 카테고리의 다른 글

File Signature  (0) 2011.12.23
MFC에서 String 조작 함수들  (0) 2011.12.06
후킹을 방어할 수 있는 방법  (0) 2011.10.21
[Add-In] PInvoke.net  (6) 2010.12.21
[C#]Process Monitor  (1) 2010.11.19
Posted by Mocker