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

提供: Appmethod Topics
移動先: 案内検索

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


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 データ型の比較」を参照してください。

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

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

Win32 から OS X への Object Pascal アプリケーションの移行

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

   ライブラリ/プラットフォーム          Win32             Win64              Mac OS X    

FMX

RTL

VCL

サポートされていません

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

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

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

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


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

FireMonkey についての詳細は、「FireMonkey アプリケーション プラットフォーム」を参照してください。


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

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

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

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

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

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

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

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

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

関連項目