|
// Ansi 및 Unicode 구분해서 코딩하기.
char *bufa = "테스트 char 데이타";
wchar_t *bufw = _T("테스트 wchar_t 데이타"); // 컴파일에러
//wchar_t *bufw = _T(L"테스트 wchar_t 데이타");
//로하면 에러안남
StringA stra = bufa;
StringW strw = bufw;
// 빌더 2009 공용으로 코딩하기. 또는 모든 빌더 버전에서 나중의 유니코드 모드를 위해 코딩하기.
TCHAR *s = _T("하늘 끝에서 내려온다.");
String ss = s;
TCHAR *s_ptr = ss.c_str(); // 컴파일에러 TCHAR *s_ptr = ss.t_str();로 수정하면 에러없음
// 확인
add(bufa);
add(bufw);
add(stra);
add(strw);
add(ss);
add(s_ptr);
위 코드는 FAQ문서중에 발췌하여 테스트해본 코드인데요.. 두번째 줄에서 컴파일 에러가 발생합니다.
에러메세지는 Cannot convert const char * to 'wchar_t' 입니다.
project의 옵션 Directories and Conditionals의 _TCHAR maps to옵션을 char로 했는데도 불구하고
IDE상으로는 항상 Unicode로 인식이 되는것 같습니다. String ss=s; 코드에서 String클릭 후 마우스오른쪽
버튼을 누르고 Find Declaration을 누르면 _DELPHI_STRING_UNICODE가 선언된
typedef UnicodeString String; 로 찾아갑니다. 그러니까 코드상으로 String으로 선언된것은
내부적으로 항상 UnicodeStriing으로 인식되어 두번째 에러난 코드를 TCHAR *s_ptr = ss.t_str();로
수정을 해줘야 에러가 안나는것 같습니다. 이런식으로 빌더2010에서는 항상 Unicode를 사용하도록
모든 소스를 고쳐줘야 하는지 궁금합니다.
고수님들 많은 조언 부탁드립니다. 감사합니다.
#if defined(_DELPHI_STRING_UNICODE)
typedef UnicodeString String; //
#else
typedef AnsiString String; //
#endif
|