VC6.0에서는 기본 설치 옵션이 유니코드를 사용하지 않는다. 따라서 설치시 유니코드를 사용하도록 옵션을 지정해주거나, 이미 설치를 하였다면 설치시디의

E:\VC98\MFC\LIB

에서 라이브러파일을 모두 복사해온다.

Project-Setting-C/C++탭에서 Processor Defination:항목의 _MBSC를 _UNICODE로 바꿔준다.

Link탭으로 이동한후 Category DropDown List에서 Output을 선택한후 Entry-point Symbol의 값에wWinMainCRTStartup를 입력하면된다.

Shared DLL을 사용할경우 DLL파일을 열수 없다는 에러가 뜨네요.. Static linked libary를 사용하는게 편할것 같네요..
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

멜론 스나이퍼를 만들면서~~ 한참 고민했던문제 중에 하니이다..

기존에 쓰던 코드를 그대로 가져와서 VC++ 2007 붙혀 넣었더니 예전까지만해도 잘 작동하던 코드가 에러를 발생하였다.. 왠지 찾아보니 2007버젼은 유니코드를 기본으로 쓰기 때문이였다.

VC++로 프로그래밍을 그래도 가끔씩 사용하는데 항상 어려운것이 문자열을 어떻게 형변환해서 원하는 형으로 쓰는가이다.. 아직도 이거 잘모르겠다..

이것 한번 해보고 저거한번 두어번 바꿔봐도 에러로 안되면.. 검색을 해보는데 설명해놓은 글도 쉽사리 이해가 안되고.. 이해되더라도 금방까먹어버린다.

우리학교 과정이 JAVA위주로 되어있어 자주 쓰지 않기때문에~~ 지금도 VC++로 작업하면 언제나 변수 타입에서 골머리를 싸매게 된다..

멜론 스나이퍼를 만들면서 알게된사실~~ 함수뒤에 W가 붙어 있는 함수는 유니코드용 함수라는 사실~~.. 그런데~~ W가 붙어 있지 않는 함수도
#define FindWindowEx FindWindowExW

이렇게~~ 해놔서~~ 기본옵션은 항상 유니코드를 쓰도록 되어있었다.

유니코드를 사용해 윈도우의 창을 찾는 FindWindowExW함수를 이용할때
 LPCWSTR로 창의 클래스명이나 캡션명을 넘겨줘야 한다..
FindWindowExW(HWND, HWND, LPCWSTR, LPCWSTR);
 
이때..
FindWindowExW(hWnd,null, "문자열","문자열");
이런식으로 넘겨 주면 문자열이 깨져서~~ 못찾는다..

이때는
FindWindowExW(hWnd,null, TEXT("문자열"),TEXT("문자열"));
로 문자열을 유니코드로 변경해줘야 한다.

CString 변수를 넘겨 줄때는 별다른 형변환 없이 자동으로 casting 되는것 같았다.

다음 찾은 텍스트 박스의 CWnd를 통해 원하는 문자열을 찍는 방법이다.

CString str = m_strFileList.GetAt(m_nTime);
m_wndText->SendMessage(WM_SETTEXT,NULL,(LPARAM)(char *)(LPCTSTR)(str) );

(LPARAM)(char *)(LPCTSTR)
이렇게 형변환을 해주어야 했다..

아직도 잘모르겠다..~~ 형변환이 너무 어렵다~~ 이거 잘할 수 있고 완벽하게 이해될려면 얼마나 걸릴려나~~

학교에서는 전혀~~ VC++로 하는 수업을 들어본적이 없고.. 근냥 프로그램 만들때 필요한 거만 검색으로 찾아서 작업하다보니~~ 이해하고 있는게 없다.. 그렇다고 책을 한권 본것도아니고~~

인터넷에 있는 강의 한번본게 다라서~~ 위 내용이 확실히 맞는지도 모르겠다.. VC++어렵다~~

조금더 체계적으로 배워야 될텐데....

신고
크리에이티브 커먼즈 라이선스
Creative Commons License


티스토리 툴바