이전 프로젝트를 C++ Builder 2009에서 XE5로 포팅했습니다. 이전 프로젝트에서 유니 코드 문자열에 대한 컴파일러 옵션은 "_TCHAR
: char"로 매핑되었습니다. 이것은 오래된 프로젝트에서 잘 작동했습니다.유니 코드 문자열 호환성 문제
포팅 할 때 XE5에서 동일한 컴파일러 옵션을 설정합니다. 하지만 여전히 같은 코드를 컴파일러 오류를 얻을 :
std::string str = String(some_component.Text).t_str();
이것은 다음과 같은 오류를 제공합니다 :
,369 :: 연산자 문자열을[bcc32 경고] file.cpp (89) : W8111 액세스가 기업 '유니 코드 스트링을 사용되지 않는 :: t_str() const를 '
[bcc32 오류] file.cpp (89) : E2285은 에 대한 일치하는 찾을 수 없습니다'= (wchar_t를 *) '
그래서 분명히 XE5는 String::t_str()
이 char*
이 아닌 wchar_t*
이되어야한다고 결정했습니다. 위에서 설명한대로 컴파일러 옵션을 설정해도 마찬가지입니다.
어떻게 해결할 수 있습니까?
저는 C++ Builder가 (2009 버전에서도) 내부적으로 유니 코드를 사용하는 단계를 밟았지만 200k LOC가있는 오래된 프로젝트입니다. 이를 유니 코드로 업데이트하는 것은 우선 순위가 매우 낮은 가파른 작업입니다.
편집
나는
std::string str = AnsiString(some_component.Text).c_str();
에 코드를 변경하여 작업을 얻을 수 있습니다 그러나 이것은 내가 많은 장소에서 코드를 변경해야 의미합니다. 코드 재 작성을 포함하지 않는 더 좋은 방법이 있습니까?
#define String (a) AnsiString (a) – user1233963