C++ Considerations for Multi-Device Applications
Go Up to Considerations for Multi-Device Applications
Contents
Available C/C++ Header Files
RAD Studio provides separate C/C++ header files for different target platforms. These files are located in the $(BDS)\include
standard search path.
To use header files from an SDK search path, see Add Remote Path Item or Edit Remote Path Item. You can manage your SDKs from Tools > Options > Environment Options > SDK Manager.
For Windows
The header files for 32-bit Windows and 64-bit Windows are located in $(BDS)\include\windows
.
Subdirectory in $(BDS)\include\windows
|
Description |
---|---|
\crtl
|
C/C++ RTL header files (.h). For more information see C Run-Time Library Reference. |
\fmx
|
FireMonkey machine generated header files (.hpp) |
\rtl
|
Delphi RTL machine generated header files (.hpp) |
\sdk
|
Microsoft Windows SDK header files (.h) |
\vcl
|
VCL machine generated header files (.h and .hpp) |
For macOS
The header files for macOS are located on the development PC in $(BDS)\include\osx
.
Sub-directory in $(BDS)\include\osx
|
Description |
---|---|
\fmx
|
FireMonkey machine generated header files (.hpp) |
\rtl
|
Delphi RTL machine generated header files (.hpp). |
For iOS
The header files for iOS are located on the development PC in $(BDS)\include\ios
.
Sub-directory in $(BDS)\include\ios
|
Description |
---|---|
\crtl
|
C/C++ RTL header files (.h). For more information see iOS C RTL. |
\fmx
|
FireMonkey machine generated header files (.hpp) |
\rtl
|
Delphi RTL machine generated header files (.hpp). |
For Android
The header files for Android are located on the development PC in $(BDS)\include\android
.
Sub-directory in $(BDS)\include\android
|
Description |
---|---|
\crtl
|
C/C++ RTL header files (.h). For more information see Android C RTL. |
\fmx
|
FireMonkey machine generated header files (.hpp) |
\rtl
|
Delphi RTL machine generated header files (.hpp). |
Framework Availability on Different Platforms
Platform | Delphi RTL (different from the C/C++ RTL) |
FireMonkey | VCL |
---|---|---|---|
32-bit Windows | |||
64-bit Windows | |||
64-bit iOS | |||
Android | |||
Linux |
Using Frameworks
On iOS and Android
The BCCIOSARM64/BCCAARM and LD options related to iOS and Android frameworks are described in the following table:
Tool | Option | Description |
---|---|---|
BCCIOSARM64 and BCCAARM C++ compiler for the 64-bit iOS Device, and Android | -isysroot
|
Specifies the root of the iOS SDK and Android NDK. This is typically set to %IOS_SDK_ROOT% or %ANDROID_NDK_ROOT% .
|
BCCIOSARM64 C++ compiler for the 64-bit iOS Device | -F
|
Specifies the framework path. This is typically set to %IOS_SDK_ROOT%\System\Library\Frameworks" .
|
LD for BCCIOSARM64 64-bit iOS Device | -syslibroot
|
Specifies the location of the logical root directory. The logical root directory is a directory on your development PC (Windows) that represents the root of the iOS SDK. |
LD for BCCAARM Android | --sysroot
|
Specifies the location of the logical root directory. The logical root directory is a directory on your development PC (Windows) that represents the root of the Android NDK. |
LD | -framework
|
Specifies a framework to link. For example, -framework Foundation links your application to the Foundation framework.
|
On the IDE, in Project > Options > C++ Compiler > Directories and Conditionals, you can use the "Framework root directories" project option to define directories to add to the framework include path.
String Literals char16_t and wchar_t on iOS and Android
On macOS and iOS, char16_t
is not equivalent to wchar_t
(as it is on Windows):
- On Windows,
wchar_t
andchar16_t
are both double-byte characters. - On iOS and Android, however, a
wchar_t
is a 4-byte character.
So, to declare UTF-16 constant strings, on Windows use either the L
or the u
prefix, whereas on iOS and Android, use the u
prefix.
Example on Windows:
UnicodeString(L"Text"), UnicodeString(u"Text")
Example on iOS, and Android:
UnicodeString(u"Text")
Using the L
prefix for string literals on iOS and Android is not, however, wrong. In this case, UTF-32 constant strings are converted to UTF-16 strings.
For portability, use the _D
macro to write constant strings that are prefixed accordingly with L
or u
. Example:
UnicodeString(_D("Text"))
For information about the mobile platforms, see Resolving Linker Warnings about String Literals.
Topics
See Also
- Enabling C++ Applications for Unicode
- Unicode Character Types and Literals (C++11)
- Requirements for Multi-Device Applications
- Delphi Considerations for Multi-Device Applications
- C++ Compilers
- BCC64.EXE, the C++ 64-bit Windows Compiler
- BCCIOSARM64.EXE, the C++ Compiler for the 64-bit iOS Device
- BCCAARM.EXE, the C++ Compiler for Android
- Framework Programming Guide: What are Frameworks?