64 ビット Windows アプリケーション開発

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

マルチデバイス アプリケーション:インデックス への移動


Object Pascal は、Win64 開発システムかネイティブ Win32 開発システムのどちらかで 64 ビット Windows アプリケーションの開発をサポートしています。また、Mac OS X アプリケーションの開発もサポートしています。

FMX、RTL による 64 ビット Windows アプリケーション開発のサポート

Appmethod の 2 つのライブラリでは、Win32 と Win64 を以下のようにサポートしています。

  • FireMonkey ライブラリ(FMX)では、サポートされているターゲット プラットフォームをすべてサポートしています。
  • RTL は、64 ビット アプリケーションでも 32 ビット アプリケーションの場合と同じように動作するよう修正されました。つまり、RTL を使用する場合は、Win64 プラットフォームにも Win32 プラットフォームにも同じソース コードを使用できます。

32 ビット Windows と 64 ビット Windows 用に別個の実行可能ファイルが必要

ビジュアル コンポーネントを使用する場合は、2 つの別個のアプリケーションをコンパイルし、そのそれぞれを異なるターゲット プラットフォームで構成する必要があります(たとえば、一方は Win32 向け、もう一方は Win64 向けなど)。そうすれば、Win32 向けの .EXE と Win64 向けの別の .EXE ができ、それぞれは適切なターゲット プラットフォームを持つように[プロジェクト マネージャ]で構成されます。設計時に使用する必要があるコンポーネント、パッケージ、ライブラリは、Win32 版と 64 ビット版の両方が存在しなければなりません。

IDE で 64 ビット Windows クロスプラットフォーム アプリケーションを構成する

64 ビット Windows プラットフォームをターゲットにするには、下図のように、[プロジェクト マネージャ][ターゲット プラットフォーム]ノードに[64 ビット Windows]プラットフォームを追加する(既に追加されている場合はアクティブにする)必要があります。

ActiveWindows64Platform.png

開発用に 32 ビット Windows PC を使用している場合には、64 ビット Windows プラットフォーム向けにビルドしたアプリケーションを、リモートの 64 ビット Windows システムを使って実行、デバッグ、配置することができます。ターゲットの 64 ビット Windows システムへの接続方法を定義した接続プロファイルを IDE で作成し、[プロジェクト マネージャ]その接続プロファイルを 64 ビット Windows ターゲット プラットフォームに割り当てます。

開発用に 64 ビット Windows PC を使用している場合、接続プロファイルは必ずしも使用する必要はありません。

64 ビット Windows アプリケーションでのよく知られた Windows API の使用

32 ビット Windows アプリケーション開発で Windows API を扱った場合は、64 ビット Windows アプリケーション開発に使用できる Windows API の多くを熟知していなければなりません。

実行、デバッグ、配置に Win64 が必要

Appmethod での Win64 アプリケーション開発は本来、クロスプラットフォーム開発です。IDE が Win32 アプリケーションだからです。つまり、64 ビット Windows をターゲット プラットフォームとするアプリケーションを実行する場合は、本質的に Win64 プラットフォームにアプリケーションを配置することになります。そのため、実行時には開発システムは 64 ビット Windows であるか Win64 システムに接続している必要があります。

開発用 PC のオペレーティング システムが 64 ビット Windows であるか 32 ビット Windows であるかで、64 ビット Windows アプリケーションの実行、デバッグ、配置には 2 とおりのシナリオがあります。

64 ビット Windows の開発システムを使用する場合

開発用 PC が 64 ビット Windows で稼働する 64 ビット マシンの場合は、プラットフォーム アシスタントまたは接続プロファイルを使用せずに、32 ビット Windows アプリケーションの場合とちょうど同じように、開発用 PCでアプリケーションの実行、デバッグ、配置を行えます。プラットフォーム アシスタントと接続プロファイルの使用は 64 ビット Windows 開発システムの場合には必須ではありませんが、それらを使用した場合は、アプリケーションの配置に配置マネージャを使用できます。

32 ビット Windows の開発システムを使用する場合

32 ビット Windows の開発システムで IDE を使って 64 ビット Windows アプリケーションを実行、デバッグ、配置するには、以下が必要です。

プラットフォーム アシスタントおよび接続プロファイルの使い方の詳細は、「マルチデバイス アプリケーション:インデックス」を参照してください。

標準の Ethernet LAN かリモート デスクトップ接続のどちらかを使って、64 ビット Windows PC に接続できます。詳細は、「32 ビット PC を Win64 PC に接続する」を参照してください。

メモ: Win64 ターゲットで Windows ファイアウォールが有効になっている場合は、PAServer が Win64 ターゲットに初めて接続する際に Windows ファイアウォールのメッセージが表示される可能性があります。その場合は、[paserver.exe にこれらのネットワークでの通信を許可する]で[プライベート ネットワーク]が選択された状態で[アクセスを許可する]をクリックします。

64 ビット Windows アプリケーションのデバッグ

一般に、Appmethod での 64 ビット Windows アプリケーションのデバッグは、32 ビット Windows アプリケーションのデバッグと非常に似ています。つまり、違いはほとんどありません。[FPU]ビューなどの一部の CPU ウィンドウで違いが現れる程度です。


  • 64 ビット Windows 上の開発システムを使用する場合は、64 ビット Windows アプリケーションの実行もデバッグもその開発システム上で行え、別個のターゲット システムに接続する必要はありません。
  • 32 ビット Windows 開発システムを使用する場合、Appmethod では、64 ビット Windows アプリケーションをデバッグするにはそれを配置する必要があります。つまり、実行時に 64 ビット Windows システムへのライブ接続を確保する必要があります。

詳細は、「マルチデバイス アプリケーションのデバッグ」を参照してください。

64 ビット Windows アプリケーションの配置

マルチデバイス アプリケーションの配置」を参照してください。

64 ビット アプリケーションについての考慮事項

64 ビット Windows のコンポーネント、パッケージ、ライブラリには 32 ビット設計時版が必要

64 ビット Windows のコンポーネント、パッケージ、ライブラリを作成する場合、アプリケーション開発時に IDE でそのコンポーネント/パッケージ/ライブラリを使用したければ、32 ビット Windows 設計時版も作成しておく必要があります。この要件は、IDE が 32 ビット Windows プログラムであることに起因します。

たとえば、[コンポーネントの新規作成]ウィザードを使用する場合、まず 32 ビット Windows 版のコンポーネントを作成する必要があります。その後、[ターゲット プラットフォーム]を 64 ビット Windows に設定し([プロジェクト マネージャ]で)、Win64 コンポーネントとしてもう一度コンポーネントをコンパイルします。Appmethod は、出力ファイル(.bpl、.dcp など)をプロジェクト出力ディレクトリ内にあるプラットフォーム固有のディレクトリに保存します。

64 ビット タイプ ライブラリの生成とインポート

64 ビット Windows アプリケーションでは、(一部の 64 ビット MS Office アプリケーションのように)32 ビット Windows タイプ ライブラリを使用できます。

現在のターゲット プラットフォームが 64 ビット版 Windows の場合、IDE では、GenTLB.exe に "-E64" を渡すようになりました。その結果、SYSKIND が SYS_WIN64 のタイプ ライブラリが生成されます(これに対して、32 ビット Windows タイプ ライブラリの場合は SYSKIND=SYS_WIN32 になります)。

レジストリの 64 ビット Windows キーにのみ登録されている別のタイプ ライブラリに依存する 64 ビット Windows タイプ ライブラリをインポートする場合は、以下の 64 ビット Windows 版 TLIBIMP.EXE を使用しなければなりません。

$(bds)\bin64\tlibimp.exe


コンポーネントを設計時および実行時に使用できるようにする

コンポーネントが各プラットフォームで使用可能かどうかを IDE が判断する方法は以下の 2 とおりあります (ここでいう "使用可能" とは、パレットに表示され、IDE によってチェックが行われれるという意味です。IDE では、コンポーネント ユニットが存在することを確認する以外に、コンパイル時のチェックは行いません)。

どちらの方法も、コンポーネントを実装した Win32 実行時(または設計時および実行時)パッケージに組み込まれているデータに基づいています。IDE では Win32 以外のプラットフォーム用にビルドされたパッケージを読み込めないため、情報については Win32 パッケージに従う必要があります。

  • Appmethod のビルド システムでは、RC_DATA リソースを PLATFORMTARGETS という Win32 パッケージ バイナリに自動的に埋め込みます。これは System.Classes.pas の pidXXX 定数のビットマスクであり、パッケージ プロジェクトがターゲットとするプラットフォームが反映されています。IDE は、パッケージを読み込む際にこのリソースを読み取り、このリソース データを使って、サポートされていないプラットフォームがアクティブになったときにコンポーネントをパレットで利用できなくするかどうかなどを判断します。
コンポーネント パッケージで複数のプラットフォームをターゲットにすると、コンポーネント開発者と IDE の間に契約が生じます。IDE では、コンポーネント パッケージ プロジェクトが複数のプラットフォームをターゲットとしていて、開発者が Win32 実行時パッケージ(および関連するすべてのコンパイル可能ファイルやリンク可能ファイル)を顧客に配布する場合には、他のターゲット プラットフォームに必要なコンパイル可能ファイル、リンク可能ファイル、実行時パッケージも配布されるものと見なします。
  • 個々のコンポーネントでは、ComponentPlatformsAttribute クラス属性を使って、Classes ユニットの同じ定数のビットマスクにより、PLATFORMTARGETS のデータを上書きすることができます。以下に例を示します。
 type
   [ComponentPlatformsAttribute(pidWin32 or pidWin64)] // Only supported on Win32 and Win64
   TMyComponent = class(TComponent)
   private
     ...
   end;
この ComponentPlatformsAttribute 属性を使用すると、上の最初の項目で述べたものと同じ契約が適用されます。

Windows プログラミング

  • Windows API 呼び出しは 64 ビット版でなければなりません。
    • try ブロックは 64 ビット Windows プログラムでサポートされています。
    • 同じプロセスで 32 ビット Windows コードと 64 ビット Windows コードを混在させることはできません。
  • DLL、コンポーネント、ライブラリ、パッケージについては、フォーム デザイナを使用する場合は、32 ビット Windows 版(設計時)と 64 ビット Windows 版(実行時)を別個にコンパイルまたはインストールする必要があります。
  • OS 拡張機能であるシェル拡張には 64 ビット Windows 版が必要です。
  • LRESULT、WPARAM、LPARAM のサイズはすべて 64 ビットに拡張されるため、メッセージ ハンドラを調べて、不適切なキャストがないかどうかを確かめる必要があります。

アセンブリ プログラミング

  • 64 ビット Windows CPU のレジスタの大半は、32 ビット Windows CPU レジスタの 2 倍の幅があります。しかし、命令レジスタ(IR)のサイズは、32 ビット Windows プロセッサでも 64 ビット Windows プロセッサでも同じです。
  • 64 ビット Windows コードにインライン アセンブリ言語を使用することができますが、以下のようにいくつかの制限事項があります。
    • リターン スタック ポインタ(RSP)の下限が変わりました。
  • Object Pascal の場合は、以下の新しい疑似命令を使用します。
    • .SAVENV
    • .PUSHNV
    • .PARAMS
    • .NOFRAME

詳細については、以下を参照してください。

64 ビット Windows 関連のトピック

関連項目