C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[60737] Re:[질문]빌더 2010에서 유니코드를 안쓰려면?
박지훈.임프 [cbuilder] 1632 읽음    2010-04-09 03:38
C++빌더 2010/2009에서 유니코드를 쓰지 않도록 강제하는 방법은 없습니다.
하지만 보여주신 코드는 두가지 방법 중 하나로 쉽게 해결할 수 있습니다.

빌더조아님이 쓸데없어 보이는 긴 캐스팅을 반복해야 했던 이유는, AnsiString 변수를 유니코드 버전의 함수에다 억지로 썼기 때문입니다. 따라서 [안시코드 변수->안시코드 함수]로 통일하거나, [유니코드 변수 -> 유니코드 함수]로 통일하면 됩니다.

유니코드로 맞추려면 아래와 같이 하면 됩니다.
String temp = "asdf";  // 혹은 UnicodeString temp = "asdf";
Application->MessageBox(temp.w_str(), L"", MB_ICONEXCLAMATION);


그리고 안시코드로 맞추려면 아래와 같이 할 수 있습니다.
AnsiString temp = "asdf";
MessageBoxA(Application->Handle, temp.c_str(), "", MB_ICONEXCLAMATION);


여기서, TApplication::MessageBox() 함수는 유니코드 버전밖에 없지만, 이 함수의 실제 API 함수인 MessageBox() 함수에는 유니코드 버전인 MessageBoxW() 함수와 안시코드 버전인 MessageBoxA() 함수 두가지가 있으므로, 안시코드 버전 함수가 필요할 때는 MessageBoxA() 함수로 대체할 수 있는 것입니다. Application 객체의 멤버로 호출하는 대신 그 핸들을 첫번째 인자로 넘긴다는 것 외에는 동일합니다.



빌더조아 님이 쓰신 글 :
: 빌더 2010을 사용해서 6.0으로 된 소스를 컨버팅하고 있는데요...
: 문제는 문자열을 유니코드 형식으로 전부 고쳐줘야 컴파일이 되네요..
:
: 예를 들어,
:
: AnsiString temp = "asdf";
: Application->MessageBox(temp.c_str(),"", MB_ICONEXCLAMATION); 를
:
: Application->MessageBox(UnicodeString(temp).c_str(),L"", MB_ICONEXCLAMATION);
:
: 로 변환해야 하는데 위와 같은 변환과정없이 멀티바이트 문자열를 소스 수정없이 컴파일하려면
:
: 어떻게 해야 되는지 알고 싶습니다... 아시는 분 꼭 알려주세요..
:
: 감사합니다.

+ -

관련 글 리스트
60701 [질문]빌더 2010에서 유니코드를 안쓰려면? 빌더조아 1215 2010/04/06
60737     Re:[질문]빌더 2010에서 유니코드를 안쓰려면? 박지훈.임프 1632 2010/04/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.