수정하실 필요 없습니다.
AnsiString으로 선언한 것을 무조건 UnicodeString으로 바꿔야 하는 게 아닙니다.
유니코드 지원을 위해 필요한 경우에만 바꾸면 됩니다.
과거 버전을 기준으로 보면, C++빌더와 델파이 모두, 실제 타입으로 AnsiString, WideString이 있었고, 또 String이라는 일종의 별명이라고 할 수 있는 타입이 있죠. 2007까지는 String이 AnsiString의 별명이었습니다.
그런데 델파이의 경우에는 개발자들이 소스코드에서 일반적으로 String이라고 많이 썼고, 반면 C++빌더에서는 AnsiString이라고 실제 타입 이름을 많이 썼죠. 델파이에서도 AnsiString이라고 쓸 수 있었고, C++빌더에서도 String이라고 쓸 수 있었는데, 그냥 관행적(?)으로 그렇게 썼습니다.
델파이와 C++빌더를 막론하고, 실제 타입인 AnsiString을 그대로 썼을 경우에는 2009로의 변환을 위해서 다른 작업이 필요한 경우는 대단히 적습니다. AnsiString 자체에 대해서는, 유니코드 지원 관계로 일부 기능이 '추가'된 것을 제외하면 기존 기능이 변경된 것은 없기 때문입니다.
반면 기존의 소스 코드에서 String이라고 썼을 때가 문제가 됩니다.
String의 실제 타입이 AnsiString에서 UnicodeString으로 바뀌었기 때문입니다.
이건, AnsiString 타입이 아닌 String 타입을 사용했던 개발자의 입장에서 보면, 마치 누군가가 자신의 코드의 모든 스트링 타입 선언을 AnsiString에서 UnicodeString으로 다 바꿔놓은 것과 같은 효과가 생기게 되죠. 그래서 컴파일에서 문제가 생기는 겁니다. 이건 앞에서 말했다시피, 일종의 별명이라고 할 수 있는 String 타입의 실제 타입이 바뀌었기 때문이죠.
설인환님께서 말씀하신 코드 부분,
AnsiString str = "test";
char buffer[256];
strcpy( buffer, str.c_str() );
이 코드는 C++빌더 2009에서도 완벽하게 똑같이 돌아갑니다. 손을 대실 필요가 전혀 없습니다.
델파이에서든 C++빌더에서든, AnsiString을 쓰지 않고 String이라고 썼기 때문에 소스를 수정해야 할 경우라면, 유니코드에 대한 대비가 전혀 필요없다는 조건 하에, 단순히 모든 String 변수 선언을 AnsiString으로 바꾸는 게 가장 간단할 것입니다.
유니코드 전면 지원으로 인한 기존 소스의 수정 작업이 이런 정도의 수정 작업이면 아주 적은 것이라고 할 수 있습니다.
그럼...
설인환 님이 쓰신 글 :
: 검색해보니 UnicodeString으로 typecast해서 쓰면 된다고 TeamB에서 답변을 했는데,
: (
http://bcbjournal.org/forums/viewtopic.php?t=672&sid=9fbdcd55a821f22aafacf5cfb2229d61 )
: 왜 이렇게 갑자기 지저분한 방식을 쓰는 걸까요.
: 이때까지 char*만 가지고도 한글을 잘 쓰고 있는데 말이죠.