Enabling C++ Applications for Unicode
Go Up to Unicode for C++ Index
Because the default string is Unicode, any C++ code that uses Appmethod frameworks and libraries must be Unicode-aware. You can ensure that your code correctly handles both narrow and wide strings by using the _TCHAR Mapping option on the Project > Options > C++ (Shared Options) dialog box.
- Note: New C++ applications automatically set the _TCHAR mapping option to
wchar_tand contain a
_tmain(...)entry point, which floats to
main. C++ applications that have _TCHAR mapping set automatically use the correct floating functions.
Unicode-Related Issues for C++
C++ has a unique set of Unicode-related issues that Object Pascal users do not encounter. These issues are due to the fact that the C++ RTL and the Windows API are narrow by default while Appmethod frameworks and libraries use Unicode strings. Some of these issues are discussed here.
Using Appmethod Frameworks and Libraries and the C++ RTL
Appmethod frameworks and libraries use Unicode, while the C++ RTL is narrow by default but contains routines for both wide and narrow strings (see Floating Functions). Thus, you need to use the wide versions of C++ RTL functions in an application that use Appmethod frameworks and libraries. To use the C++ RTL in an application that requires wide strings, you need to do the following:
- Set _TCHAR Mapping to
wchar_tand use _TCHAR in your code.
- Use the "floating" version of the C++ RTL members, such as
strcpy. See the list of Floating Functions.
Using Windows API
The Windows API is typically narrow by default. The _TCHAR mapping option helps tremendously here, but the option is OFF (set to
char) by default for C++ applications that do not use Appmethod frameworks and libraries.
To use the Windows API in a C++ application that does not use Appmethod frameworks and libraries, you must explicitly set the _TCHAR maps to option to
wchar_t on the Project > Options > C++ (Shared Options) dialog box.
Passing String Constants
String constants, such as "string constant", are still narrow (
char*), so you cannot pass them to functions of Appmethod frameworks and libraries that take PChar as you did before. You can pass the constant to functions of Appmethod frameworks and libraries with a PChar parameter if you prefix the constant with L, as in:
This conversion is automatically done for you when you set _TCHAR mapping to
wchar_t and use the _TEXT or _T macros, as described in _TCHAR Mapping.
Setting the CodePage
You can set the codepage for AnsiString types with AnsiStringT<codepage>.
The same predefined types are available that Object Pascal provides:
- AnsiString is
- UTF8String is
AnsiStringT<65005>, the UTF8 code page.
- RawByteString is
Note: The UTF8 encoding can be specified by using the UTF8 codepage and encoding the strings between the API-RTL and the calls to Appmethod frameworks and libraries. See UTF-8 Conversion Routines.