Delphi におけるマルチデバイス アプリケーションについての考慮事項

提供: RAD Studio
移動先: 案内検索

マルチデバイス アプリケーションについての考慮事項 への移動


拡張データ型は、プラットフォームによって異なります。

Extended データ型のサイズは、各プラットフォームによって異なります。拡張型は、高精度の浮動小数点型で、ランタイム ハードウェアに依存します。

  • 32 ビット Intel Windows では、Extended 型は(現在も)10 バイトです。
  • 64 ビット Intel Windows では、Extended 型は Double のエイリアスであり、8 バイトです。
  • 64 ビット Intel Linux および 64 ビット Intel macOS では、Extended 型は 16 バイトです。
  • ARM プラットフォーム(64 ビット iOS、64 ビット ARM macOS、64 ビット ARM iOS シミュレータ、Android 32 ビットおよび 64 ビットなど)では、Extended 型は Double のエイリアスであり、8 バイトです。

このため、Extended データ型を Win64 や ARM のプラットフォームで使用した場合、Win32 での使用に比べて精度が落ちます。アプリケーションで浮動小数点演算などに Extended データ型を使用しており精度に頼っている場合は、サイズのこのような違いはデータに影響を及ぼすおそれがあります。

非常に小さい値や非常に大きい値が最も影響を受けます。これら 2 つのデータ型の精度は次のようになります。

  • 1x10308 IEEE Double、8 バイト Extended 型でサポートされており、64 ビット Intel Windows およびすべての ARM プラットフォームを含みます。
  • 1x104932 IEEE Extended、10 または 16 バイト Extended 型でサポートされており、Intel POSIX プラットフォームを含みます。

コードベースに Extended データ型が含まれている場合は、次のヒント メッセージが表示されます:W1066 Extended 型の浮動小数値の精度が失われます。Double 型に丸めました(Delphi)。 10 バイト拡張精度浮動小数点演算は 32 ビット Intel Windows アプリケーションでサポートされており、64 ビット Intel Windows アプリケーションではサポートされていません。 64 ビット Intel Windows では、Extended 型の変数を扱う浮動小数点演算は倍精度型に丸められます。

TExtended80Rec レコードは、すべてのプラットフォームで拡張精度浮動小数点変数を操作するために使用できますが、メモリの読み取りまたはメモリからの書き込みと、低レベルの変更 (仮数、指数、または符号の変更) の実行のみに使用できます。

64 ビット データ型についての詳細は、「64 ビット Windows データ型と 32 ビット Windows データ型の比較」を参照してください。

64 ビット POSIX プラットフォーム上でのデータ型 LongInt と LongWord の差異

Delphi と POSIX API 間の相互運用性を維持するために、64 ビット POSIX プラットフォームでは、LongInt 型と LongWord 型のサイズが 64 ビットに変更されています。すべての 32 ビット プラットフォームおよび 64 ビット Windows プラットフォームは、LongInt および LongWord 型に対して 32 ビットを維持します。

macOS 64 ビット (ARM) ターゲット プラットフォームのサポート

macOS 64 ビット (ARM) は、macOS 11 で M1 Apple Silicon CPU をネイティブ ターゲットとしています。 このプラットフォームを使用して、ネイティブ M1 アプリケーションを構築します (実行には M1 ハードウェアが必要です)。

メモ: RAD Studio は、macOS 64 ビット (Intel) ターゲットのサポートと、ARM と Intel の両方のバイナリを 1 つのパッケージに含む、ユニバーサル バイナリ アプリケーションの作成を維持しています。

コンソール アプリケーション、基本的な FireMonkey アプリケーション、データベース機能を使用した FMX アプリケーションなど、サポートされているすべてのタイプのアプリケーションを作成し、組み込み InterBase のユニバーサル バージョンである IBLite を活用します。

ユニバーサル バイナリ

Intel と ARM の両方のコードを含むユニバーサル バイナリを作成します。ターゲット プラットフォームが macOS 64 ビット (ARM) であることを確認します。[プロジェクト オプション]で、[ビルド|Delphi コンパイラ|コンパイル|その他]と移動し、[macOS ユニバーサル バイナリ ファイル (x86_64 + arm64) を生成]をオンにします。アプリケーションを必ず配置してください。配置マネージャは、2 つのバイナリを、1 つの「ユニバーサルな」バイナリにまとめます。これは、アプリケーションをターゲットの macOS に転送する前に行います。ユニバーサル バイナリのファイルは、OSXARM64\Debug フォルダにあります。

macOS でのスタック アラインメントの問題

macOS アプリケーションの場合、すべてのメモリ データを 16 バイト境界にスタック整列させなければならないという要件が 1 つの大きな問題になります。

Delphi アプリケーションの移行:Win32 から macOS へ

RAD Studio のさまざまなライブラリによるプラットフォーム サポートの状況を以下の表にまとめます。

ライブラリ\プラットフォーム Win32 Win64 macOS 64 ビット

FMX

Checkmark.svg
Checkmark.svg
Checkmark.svg

RTL

Checkmark.svg
Checkmark.svg
Checkmark.svg

VCL

Checkmark.svg
Checkmark.svg

サポートされていません

メモ: この表は、ライブラリによるプラットフォーム サポートの状況を大まかに示したものにすぎません。

RTL と VCL については、特定プラットフォームのサポートで一部例外があります。 </blockquote>

VCL は Windows 専用であり、macOS をサポートしていません。 macOS をターゲットとするアプリケーションは、FireMonkey(FMX)を使って作成しなければなりません。

一方、Delphi ランタイム ライブラリ(RTL)の大部分は、サポートされているターゲット プラットフォームをすべてサポートしています。RTL には System、SysUtils、IOUtils の各ユニットなどが含まれており、これらには、プラットフォームに依存しない要素が用意されています。

  • (VCL ではなく)RTL のみ使用する Delphi アプリケーションは、ほとんど変更せずに Win64 で動作します。
  • VCL や RTL を使用する Delphi アプリケーションはすべて、Win32 と Win64 の両方をサポートします。

RTL の詳細については、「RTL(ランタイム ライブラリ)の利用」を参照してください。

FireMonkey についての詳細は、「FireMonkey」を参照してください。

VCL についての詳細は、「ビジュアル コンポーネント ライブラリ(VCL)の導入」を参照してください。

Delphi アプリケーションの移行:Win32 から Win64 へ

VCL、FMX、RTL は Win32 でも Win64 でもサポートされています。

Delphi Win64 アプリケーション開発の詳細は、「64 ビット Windows アプリケーション開発」を参照してください。

Delphi アプリケーションの移行:Win32 から Linux64 へ

VCL および FMX は、Linux プラットフォームではサポートされていません。現時点では、Linux はコンソール アプリケーションのみサポートしています。しかしながら、FmxLinux 製品(GetIt パッケージ マネージャより入手可)では、Linux を FMX アプリケーションのターゲットとして使用することが可能です。詳細については、「FireMonkey for Linux」ページを参照してください。

Delphi Linux アプリケーション開発の場合、「Linux アプリケーション開発」を参照してください。

Delphi アプリケーションの移行:デスクトップからモバイルへ

Clang ベースの C++ コンパイラの Delphi と C++Builder の相互運用機能で 'absolute' キーワードはサポート外

Clang 拡張 C++ コンパイラとの相互運用機能を実行する Delphi コードを記述する場合、Clang 拡張 C++ コンパイラとの相互運用機能を実行するとき、Delphi アプリケーションの interface セクションには、"absolute" Delphi 指令/キーワードを使用できません。ただし、implementation セクションでは "absolute" キーワードを使用できます。

LLVM では、変数を別の変数にオーバーレイする仕組みを提供していないため、C++Builder では変数ごとに一意なシンボルを前提とします。

インライン アセンブリでの制限

コード ベースにインライン アセンブリ コードが含まれている場合、新しいプラットフォームに移行するためにコードの変更が必要になることがあります。詳細については、次のトピックを参照してください:

64 ビット Intel Windows プラットフォームの場合

ARM プラットフォームおよび Intel POSIX プラットフォームの場合

これらのプラットフォームでは、インラインアセンブラをサポートしていません。

関連項目