|
조언 감사드립니다^^
한가지 더 궁금한것이 있습니다. _DELPHI_STRING_UNICODE 이 define 되어 있는데
이걸 define 안하려면 어디서 해야 하는지요? 이것만 define안하면 내부적으로 String타입을
AnsiString타입으로 쓸수 있을것 같습니다.
좋은 하루 되세요!!
감사합니다.
Lyn 님이 쓰신 글 :
: TCHAR은 char 이더라도
:
: String ss = s;
:
: ss가 String(UnicodeString) 으로 선언되었으니 그게 문제죠.
:
:
: 그냥 정석대로 짠 코드라면 그냥 빌드만 다시 하면 돌아갔을텐데..
:
: 빌더조아 님이 쓰신 글 :
: : // 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
|