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

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

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


64 ビット Windows システムでは Extended データ型のサイズは 2 バイト小さい

Extended データ型のサイズは、以下のように、Win64 と Win32 では異なります。

  • Win64 では、Extended 型は Double(8 バイト)のエイリアスです。
  • Win32 では、Extended 型は(依然として)10 バイトです。

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

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

  • 1x10308 IEEE Double(Win64 でサポート)
  • 1x104932 IEEE Extended(Win32 でサポート)

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

拡張精度浮動小数点変数を扱うために TExtended80Rec レコードを使用できます。ただし、メモリからの読み書きと低レベルの変更(仮数部、指数部、または符号の変更)しか実行できません。

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

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

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

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

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

   ライブラリ/プラットフォーム          Win32             Win64              macOS    

FMX

RTL

VCL

サポートされていません

メモ: この表は、ライブラリによるプラットフォーム サポートの状況を大まかに示したものにすぎません。 RTL と VCL については、特定プラットフォームのサポートで一部例外があります。 たとえば、BDE は Win64 と macOS のどちらでもサポートされていません。

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

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

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


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

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

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

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

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

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

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

Win64 では Delphi と C++Builder との相互運用機能で 'absolute' キーワードがサポートされていない

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

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

64 ビット版 Windows でのインライン アセンブリの制限

ユーザーのコード ベースにインライン アセンブリ コードが含まれる場合は、64 ビットに移行するためにコードを変更する必要があります。詳細は、以下のトピックを参照してください。

関連項目