Delphi におけるクロスプラットフォーム アプリケーションについての考慮事項
出典: RAD Studio XE2
クロスプラットフォーム アプリケーション:インデックス への移動
目次 |
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 型に丸めました(Delphi)」。 拡張精度浮動小数点演算は 32 ビット アプリケーションでサポートされており、64 ビット アプリケーションではサポートされていません。 Win64では、Extended 型の変数を扱う浮動小数点演算は倍精度型に丸められます。
拡張精度浮動小数点変数を扱うためにTExtended80Rec レコードを使用できます。ただし、メモリからの読み書きと低レベルの変更(仮数部、指数部、または符号の変更)しか実行できません。
Win32 から OS X への Delphi アプリケーションの移行
VCL は Windows 専用であり、OS X をサポートしていません。
それに対して、RTL は Win32、Win64、OS X をサポートしています。 中でも、RTL には System、SysUtils、IOUtils の各ユニットが含まれています。 (VCL ではなく)RTL のみを使用する Delphi アプリケーションは、ほとんど変更しなくても OS X(および Win64)で動作します。 VCL や RTL を使用する Delphi アプリケーションは、Win32 と Win64 の両方をサポートします。 RTL に関するさらなる情報については、「RTL (ランタイム ライブラリ)の利用」を参照してください。
Win32 から Win64 への Delphi アプリケーションの移行
VCL と RTL は Win32 でも Win64 でもサポートされています。
Delphi Win64 アプリケーション開発については、「Windows 向けの 64 ビット クロスプラットフォーム アプリケーション開発」を参照してください。
64 ビット版 Windows でのインライン アセンブリの制限
ユーザーのコード ベースにインライン アセンブリ コードが含まれる場合は、64 ビットに移行するためにコードを変更する必要があります。 詳細は、以下のトピックを参照してください。