태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

'2008/08/06'에 해당되는 글 2건

  1. 2008/08/06 TRACE 사용하기 by Fawkes
  2. 2008/08/06 스트링 형변환 (2) by Fawkes

TRACE 사용하기

Programming : 2008/08/06 18:43

디버깅할때 유용하게 사용되는 TRACE
유니코드가 출력되지 않을때는 다음과 같이 하면 된다.

#include <locale.h>
BOOL Babo::InitInstance()
{
 ...............................
   setlocale(LC_ALL, "Korean");//로케일 설정
.................................
}

CString str=_T("배고프다.");
TRACE(_T("%s\n"),str);

이렇게 하면 아래와 같이 출력창에 나온다.ㅋ
사용자 삽입 이미지
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Fawkes

트랙백 주소 :: http://hogwarts.tistory.com/trackback/173 관련글 쓰기

댓글을 달아 주세요

스트링 형변환

Programming : 2008/08/06 17:34

Visual Studio6 에서 쓸때는 몰랐는데..
2005쓰면서 unicode로 하다 보니깐 매번 짜증이 샘솟는다..
지금까지 사용한 것을 살짝 정리해 보았다.

문자관련 함수

MBCS(multi-byte character set) : ASCII 코드 문자열을 쓰는 함수
WCS(wide character string) : 유니코드 문자열을 쓰는 함수

함수 제일 뒤에 ASCII를 나타내는 A와 Wide Character를 나타내는 W를 붙여서 구분함.
예)  GetCurrentDirectoryA ...
예외) cout, wcout

LPCTSTR(Long Pointer Constant TCHAR String)
여기서 TCHAR 라는 것은 typedef  유니코드가 설정되어 있으면 2바이트로(wchar_t) 아니면 기존 char 방식인 1바이트로(char) 한다는 것을 의미.

LPSTR : 8비트 윈도우 캐릭터 스트링(string) 포인터 문자.
LPCSTR : LPSTR 와 같고 단지 상수형(Constant )이라는 포인터문자.

참조:
http://cafe.naver.com/whatvoip.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=225


--> MFC의 CString 은 TCHAR 형이다.

ATL 형변환 메크로

종류는 [소스 타입]2[새로운 타입][소스 타입]2C[새로운 타입] 이 있다.
여기서 2C의 C는 const형(읽기전용)이라는 뜻이다.

ATL 3.0 String Conversion Macros

A2BSTR OLE2A T2A W2A
A2COLE OLE2BSTR T2BSTR W2BSTR
A2CT OLE2CA T2CA W2CA
A2CW OLE2CT T2COLE W2COLE
A2OLE OLE2CW T2CW W2CT
A2T OLE2T T2OLE W2OLE
A2W OLE2W T2W W2T



여기서 A, W, T, OLE, BSTR이 있는데 그 의미는 다음과 같다.

A : MBCS 스트링, char* (A 는 ANSI를 의미) -> LPSTR
W : Unicode 스트링, wchar_t* (W는 wide를 의미) -> LPWSTR
T : TCHAR 스트링, TCHAR* -> LPTSTR
OLE : OLECHAR 스트링, OLECHAR* (사실, W와 같은 의미) -> LPOLESTR
BSTR : BSTR

이를 통해 몇가지 메크로를 분석해 보면

매크로 인자 결과
A2CW (LPCSTR) (LPCWSTR)
A2W (LPCSTR) (LPWSTR)
W2CA (LPCWSTR) (LPCSTR)
W2A (LPCWSTR) (LPSTR)
T2COLE (LPCTSTR) (LPCOLESTR)
T2OLE (LPCTSTR) (LPOLESTR)
OLE2CT (LPCOLESTR) (LPCTSTR)
OLE2T (LPCOLESTR) (LPCSTR)



*사용법:
#include <atlconv.h>
void func( LPSTR lpsz )
{
   USES_CONVERSION; //형변환 메크로를 사용하기 위해서.
   ...
   LPWSTR x = A2W(lpsz)
   // Do something with x
   ...
}

*사용시 주의점:
이 매크로는 메모리를 스택에 잡음:
1) 과도한 순환문 속에서는 사용하면 안됨.
   - 매크로가 불릴 때마다 스택의 메모리를 잡아먹습니다.
   - 그 메모리는 함수가 끝날 때까지 해제되지 않습니다.
2) 매크로의 결과를 리턴하면 안됨.
   - 결과로 나오는 포인터는 함수가 끝날 때까지만 유효합니다.

참조 :
http://msdn.microsoft.com/en-us/library/87zae4a3(VS.80).aspx
http://jof4002.net/?Unicode
http://eroom.korea.com/post/board.aspx?bid=kmh_19505&mode=read&view=board&pid=189103&page=1


LPWSTR to CString

(CString) 으로 캐스팅하면 끝


CString to LPWSTR

CString strString = "abcd";
BSTR bstrString = strString.AllocSysString();
LPWSTR pwstr = (LPWSTR)bstrString;
SysFreeString(bstrString);

CString to LPTSTR

CString str = _T("new text");

  LVITEM item = {0};
 
  item.mask = LVIF_TEXT;
  item.iItem = 1;
  item.pszText = (LPTSTR)(LPCTSTR) str; // 잘못된 사용!
  // 올바른 사용.
  /*1)*/ item.pszText = str.GetBuffer();
  // 또는
  /*2)*/ _tcscpy_s(item.pszText, MAX_PATH, str.GetBuffer(str.GetLength()));
  ListView_SetItem ( &item );
  str.ReleaseBuffer();

참조 :
http://eroom.korea.com/post/board.aspx?bid=kmh_19505&mode=read&view=board&pid=189103&page=1

CString to DWORD

CString str=_T("abcd");
DWORD dw = (DWORD)_ttoi((LPCTSTR)str);



이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Fawkes

트랙백 주소 :: http://hogwarts.tistory.com/trackback/172 관련글 쓰기

댓글을 달아 주세요

  1. 찾던 건데 감사합니다..퍼가요..

www.com.co.kr 또는 kr.net 로 접속되는 현상

멤 피씨에서 가끔 주소창에서 주소를 입력을 했을때 http://www.com.co.kr/ 로 연결되는 현상이 발생했다. 예전에 어떤 일?!때문에 도메인 서버 IP를 168.126.63.2 로 쓰고 있었는데 아무래도 도메인 서버..

싸구려 커피 + 달이 차오른다.

최고의 그룹이 등장했다 ㅋ "장기하와 얼굴들" ㅋ * 싸구려 커피 - 싸구려 커피 - 싸구려 커피를 마신다. 미지근해 적잖이 속이 쓰려온다. 눅눅한 비닐 장판에 발바닥이 쩍 달라 붙었다 떨어진다. 이제는 아무렇지 않어 바퀴벌레..

그립다.
그립다. 2008/10/14

예전에는 내가 주도 하는 삶을 살았던거 같은데.. 요즘은 뭔가에 끌려 다니거나 대안이 없어 할 수 없이 선택해야 하는 일 들이 점점 많아 지고 있다. 탈출 하고 싶은 마음이 들다가도 까먹고 다시 지금의 모습을 유지한다. 미..

아하하하하하하하하하!!!

아하하하하하하하하하!!! ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 뭐가 이렇게 웃겼을까?ㅋ