2008-09-30 2 views
6

나는 BCB5 이후부터 C++ Builder로 개발 된 Win32 VCL 응용 프로그램을 가지고 있으며, ECB2009 또는 현재 호출되는 모든 것을 이식하려고합니다.C++ Builder 2009 용 C++ Builder 응용 프로그램을 업데이트하기위한 지침이 있습니까?

내 응용 프로그램 중 일부는 이전의 TNT/TMS 유니 코드 구성 요소를 사용하므로 일부 코드에는 AnsiStrings와 WideStrings가 잘 혼합되어 있습니다. 새 버전에서는 UnicodeString과 c_str과 같은 함수를 변경하는 #define을 소개합니다.

가능한 경우 이전 버전과 호환되는 방식으로 코드를 수정하여 BCB2007에서 필요한 경우 동일한 코드베이스를 컴파일하고 실행할 수 있습니다 (비 유니 코드 방식으로). 우려의

특정 영역은 다음과 같습니다 TXMLDocument

  • 등 232 COMMS에 사용되는 '원시'문자열,
  • 와 기능에게 Win32 API를로/
  • 상호 운용성을 문자열을 전달

    • 변경 사항을 나이프 및 포크로 변경하는 대신 가능하면 이전 버전과의 호환성을 유지하면서 마이그레이션을 쉽게 적용 할 수있는 가이드 라인을 찾고 있습니다.

      그러한 가이드 라인이 이미 존재하지 않는다면, 여기에 공식화 할 수 있을까요?

  • 답변

    4

    가장 큰 문제는 C++ Builder 2009 및 이전 버전과의 호환성입니다. 유니 코드 차이점도 있지만 프로젝트 구성 파일도 변경되었습니다. 내가 CodeGear forums에 따라 왔던 토론에서,이 문제에 대한 선택의 폭이 너무 넓습니다.

    내가 처음 생각한 것 같습니다. 그렇게하지 않았다면, C++Builder 2009 release notes입니다.

    가장 큰 것은 TCHAR 매핑 (wchar 또는 char에 대한 매핑)입니다. STL 문자열 종류를 사용하는 것은 도움이 될 수 있습니다. 왜냐하면 두 버전간에 매우 다르지 않아야하기 때문입니다. 매핑은 C++ Builder 2007에서도 존재합니다 (tchar 헤더 포함).

    2

    명시 적으로 Ansi 또는 Explicit 유니 코드 일 필요가없는 코드의 경우 System :: String, System :: Char 및 System :: PChar typedef를 최대한 사용하는 것이 좋습니다. 그렇게하면 많은 이전이 쉬워지고 이전 버전에서 작동합니다.

    System :: String을 API 함수에 전달할 때 프로젝트 옵션에서 새로운 "TCHAR 매핑 대상"설정을 고려해야합니다. "TCHAR에 매핑되는"이 "wchar_t"로 설정되거나, "TCHAR가 매핑되는"이 "char"로 설정된 경우 UnicodeString :: c_str()으로 AnsiString :: c_str()을 전달하려고하면 적절한 작업을 수행해야합니다 형변환. "TCHAR 맵핑 대상"이 "wchar_t"로 설정된 경우. 기술적으로, UnicodeString :: t_str()은 API에서 TCHAR과 같은 역할을하지만 t_str()은 잘못 사용하면 위험 할 수 있습니다 ("TCHAR 매핑 대상"이 "char"으로 설정된 경우, t_str()은 Ansi에 대한 UnicodeString의 내부 데이터).

    "원시"문자열의 경우 새 RawByteString 유형 (권장하지 않음) 또는 TBytes (바이트 배열 - 권장)를 사용할 수 있습니다. 비 문자 데이터를 시작하려면 Ansi/Wide/UnicodeString을 사용하면 안됩니다. 대부분의 사람들은 이전 버전에서 임시 데이터 버퍼로 AnsiString을 사용했습니다. 더 이상하지 마십시오. AnsiString이 이제 코드 페이지를 인식 할 수 있으므로 데이터가 다른 코드 페이지로 변환 될 수 있으므로 특히 중요합니다.