Windows 向けの 64 ビット クロスプラットフォーム アプリケーション開発
出典: RAD Studio XE2
クロスプラットフォーム アプリケーション:インデックス への移動
Delphi では、ネイティブ Win32 開発システムか Win64 開発システムのどちらかでの 64 ビット Windows アプリケーションの開発をサポートしています。一方、C++Builder では Win32 アプリケーションと Mac OS X アプリケーションはサポートしていますが、Win64 アプリケーションはサポートしていません。
目次 |
VCL、FMX、RTL による 64 ビット Windows アプリケーション開発のサポート
この 3 つのライブラリはすべて Win32 も Win64 もサポートしています。
- FMX(FireMonkey)ライブラリは、サポートされているターゲット プラットフォームをすべてサポートしています。
- VCL と RTL は、64 ビット アプリケーションでも 32 ビット アプリケーションの場合と同じように動作するよう修正されました。つまり、VCL や RTL のみを使用する場合は、Win64 プラットフォームにも Win32 プラットフォームにも同じソース コードを使用できると期待することができます。
ビジュアル コンポーネントを使用する場合は、2 つの別個のアプリケーションをコンパイルし、そのそれぞれを異なるターゲット プラットフォーム(1 つは Win32 向け、もう 1 つは Win64 向け)で構成する必要があります。そうすれば、[プロジェクト マネージャ]でそれぞれ適切なターゲット プラットフォームを持つように構成された、Win32 向けの .EXE と Win64 向けの別の .EXE を作成できます。設計時に使う必要があるコンポーネントやパッケージやライブラリは、Win32 版と 64 ビット版の両方がなければなりません。
IDE で 64 ビット クロスプラットフォーム アプリケーションを構成する
64 ビット プラットフォームをターゲットにするには、下図のように、[プロジェクト マネージャ]で[ターゲット プラットフォーム]ノードに[64 ビット Windows]プラットフォームを追加した後、その[64 ビット Windows]プラットフォームをアクティブにする(ダブルクリックする)必要があります。
64 ビット アプリケーションの実行、デバッグ、配置に Win64 リモート ターゲット システムを使用する(開発には Win32 システムを使用する)場合は、IDE でリモート プロファイルを作成し、それをターゲット プラットフォームに割り当てなければなりません。
Win64 開発システムを使用する場合、リモート プロファイルは必ずしも使用する必要はありません。
64 ビット Windows アプリケーションでのよく知られた Windows API の使用
32 ビット アプリケーション開発で Windows API を扱った場合は、64 ビット アプリケーション開発に使用できる Windows API の多くを熟知していなければなりません。
実行、デバッグ、配置に Win64 が必要
RAD Studio での Win64 アプリケーション開発は本来、クロスプラットフォーム開発です。IDE が Win32 アプリケーションだからです。つまり、64 ビット Windows をターゲット プラットフォームとするアプリケーションを実行する場合は、本質的に Win64 プラットフォームにアプリケーションを配置することになります。そのため、実行時には開発システムは 64 ビット Windows であるか Win64 システムに接続している必要があります。
開発用 PC のオペレーティング システムが 64 ビットであるか 32 ビットであるかで、64 ビット Windows アプリケーションの実行、デバッグ、配置には 2 とおりのシナリオがあります。
64 ビットの開発システムを使用する場合
開発用 PC が 64 ビット Windows で稼働する 64 ビット マシンの場合は、プラットフォーム アシスタントとリモート プロファイルを使用せずに、32 ビット Windows アプリケーションの場合とちょうど同じように、開発用 PCでアプリケーションの実行、デバッグ、配置を行えます。ただし、プラットフォーム アシスタントとリモート プロファイルの使用は Win64 開発システムの場合には必須ではありませんが、それらを使用した場合は、アプリケーションの配置に配置マネージャを使用できます。
32 ビットの開発システムを使用する場合
Win32 開発システムで IDE を使って 64 ビット Windows アプリケーションを実行、デバッグ、配置するには、以下が必要です。
- 64 ビット ターゲット システムにプラットフォーム アシスタントをインストールして実行すること
- 64 ビット ターゲット システムについて記述したリモート プロファイルを Win32 開発システム上で作成すること
- 64 ビット Windows ターゲット プラットフォームへのライブ接続を確保すること ([ツール|オプション...|環境オプション|リモート プロファイル]ページの[接続テスト]を使用)
プラットフォーム アシスタントおよびリモート プロファイルの使い方の詳細は、「クロスプラットフォーム アプリケーション作成のステップ」を参照してください。
標準の Ethernet LAN かリモート デスクトップ接続のどちらかを使って、64 ビット PC に接続できます。詳細は、「開発用 PC を Win64 PC に接続する」を参照してください。
メモ: Win64 ターゲットで Windows ファイアウォールが有効になっている場合は、paserver が Win64 ターゲットに初めて接続する際に Windows ファイアウォールのメッセージが表示される可能性があります。その場合は、[paserver.exe にこれらのネットワークでの通信を許可する]で[プライベート ネットワーク]が選択された状態で[アクセスを許可する]をクリックします。
64 ビット アプリケーションのデバッグ
一般に、RAD Studio での 64 ビット Windows アプリケーションのデバッグは、32 ビット Windows アプリケーションのデバッグと非常に似ています。つまり、違いはほとんどありません。[FPU]ビューなどの一部の CPU ウィンドウで違いが現れる程度です。
32 ビット開発システムを使用する場合、RAD Studio では、64 ビット アプリケーションをデバッグするにはそれを配置する必要があります。つまり、実行時に 64 ビット システムへのライブ接続を確保する必要があります。64 ビット開発システムを使用する場合は、実行もデバッグもその開発システムで行え、別個のターゲット システムに接続する必要はありません。
詳細は、「クロスプラットフォーム アプリケーションのデバッグ」を参照してください。
64 ビット アプリケーションの配置
プラットフォーム アシスタントとリモート プロファイルを使用する場合は、配置マネージャを使用して 64 ビット アプリケーションを配置できます。64 ビット開発システムを使用している場合に配置マネージャを使用するには、配置先のターゲット システムについて記述したリモート プロファイルを作成する必要があります。「クロスプラットフォーム アプリケーションの配置」を参照してください。
64 ビット アプリケーションについての考慮事項
64 ビットのコンポーネント、パッケージ、ライブラリには 32 ビット設計時版が必要
64 ビットのコンポーネント、パッケージ、ライブラリを作成する場合、アプリケーション開発時に IDE でそのコンポーネント/パッケージ/ライブラリを使用したければ、32 ビット設計時版も作成しておく必要があります。この要件は、IDE が 32 ビット Windows プログラムであることに起因します。
たとえば、[コンポーネントの新規作成]ウィザードを使用する場合、まず 32 ビット版のコンポーネントを作成する必要があります。その後、[ターゲット プラットフォーム]を 64 ビット Windows に設定し([プロジェクト マネージャ]で)、Win64 コンポーネントとしてもう一度コンポーネントをコンパイルします。RAD Studio は、出力ファイル(.bpl、.dcp など)をプロジェクト出力ディレクトリ内にあるプラットフォーム固有のディレクトリに保存します。
64 ビット タイプ ライブラリの生成とインポート
64 ビット アプリケーションでは、(一部の 64 ビット MS Office アプリケーションのように)32 ビット タイプ ライブラリを使用できます。
現在のターゲット プラットフォームが 64 ビット版 Windows の場合、IDE では、GenTLB.exe に "-E64" を渡すようになりました。その結果、SYSKIND が SYS_WIN64 のタイプ ライブラリが生成されます(これに対して、32 ビット タイプ ライブラリの場合は SYSKIND=SYS_WIN32 になります)。
レジストリの 64 ビット キーにのみ登録されている別のタイプ ライブラリに依存する 64 ビット タイプ ライブラリをインポートする場合は、以下の 64 ビット版 TLIBIMP.EXE を使用しなければなりません。
$(bds)\bin64\tlibimp.exe
設計時および実行時に利用可能なコンポーネント
以下では、Win32/Win64/OSX32 でコンポーネントが利用可能かどうかを IDE が判断する 2 つの方法を説明します (ここでいう "利用可能" とは、パレットに表示され、IDE によってチェックが行われれるという意味です。IDE では、コンポーネント ユニットが存在することを検証する以外に、コンパイル時のチェックを行いません)。どちらの方法も、コンポーネントを実装した Win32 実行時(または設計時および実行時)パッケージに埋め込まれているデータを使用します。IDE では Win64 パッケージおよび OSX32 パッケージを読み込めないため、Win32 パッケージの情報を使用するしかありません。
- RAD Studio のビルド システムでは、RC_DATA リソースを PLATFORMTARGETS という Win32 パッケージ バイナリに自動的に埋め込みます。これは System.Classes.pas の pidXXX 定数のビットマスクであり、パッケージ プロジェクトがターゲットとするプラットフォームが反映されています。IDE は、パッケージを読み込む際にこれを読み取り、それを使って、サポートされていないプラットフォームがアクティブになったときにコンポーネントをパレットで利用できなくするかどうかなどを判断します。
- コンポーネント パッケージで複数のプラットフォームをターゲットにすると、コンポーネント開発者と IDE の間に契約が生じます。IDE では、コンポーネント パッケージ プロジェクトが複数のプラットフォームをターゲットとしていて、開発者が Win32 実行時パッケージ(および関連するすべてのコンパイル可能ファイルやリンク可能ファイル)を顧客に配布する場合には、他のターゲット プラットフォームに必要なコンパイル可能ファイル、リンク可能ファイル、実行時パッケージも配布されるものと見なします。
- 個々のコンポーネントでは、ComponentPlatformsAttribute クラス属性を使って、クラスの同じ定数のビットマスクにより、PLATFORMTARGETS のデータを上書きすることができます。以下に例を示します。
type [ComponentPlatformsAttribute(pidWin32 or pidWin64)] // not supported on OSX TMyComponent = class(TComponent) private ... end;
- この属性を使用すると、上の最初の項目で述べたものと同じ契約が適用されます。
Windows プログラミング
- Windows API 呼び出しは 64 ビット版でなければなりません。
- try ブロックは 64 ビット プログラムでサポートされています。
- 同じプロセスで 32 ビット コードと 64 ビット コードを混在させることはできません。
- DLL、コンポーネント、ライブラリ、パッケージについては、フォーム デザイナを使用する場合は、32 ビット版(設計時)と 64 ビット版(実行時)を別個にコンパイルまたはインストールする必要があります。
- OS 拡張機能であるシェル拡張には 64 ビット版が必要です。
- LRESULT、WPARAM、LPARAM のサイズはすべて 64 ビットに拡張されるため、メッセージ ハンドラを調べて、不適切なキャストがないかどうかを確かめる必要があります。
アセンブリ プログラミング
- 64 ビット CPU のレジスタの大半は、32 ビット CPU レジスタの 2 倍の幅があります。しかし、命令レジスタ(IR)のサイズは、32 ビット プロセッサでも 64 ビット プロセッサでも同じです。
- 64 ビット コードでインライン アセンブリ言語を使用する場合は、以下のように、いくつかの制限事項があります。
- アセンブリ コードと Pascal コードを 1 つのブロックで混在させることはできません。関数は、すべてアセンブリ言語またはすべて Pascal で記述する必要があります。
- リターン スタック ポインタ(RSP)の下限が変わりました。
- 以下の新しい疑似命令を使用します。
- .SAVENV
- .PUSHNV
- .PARAMS
- .NOFRAME
詳細については、以下を参照してください。
64 ビット アプリケーションのトピック
- 開発用 PC を Win64 PC に接続する
- 64 ビット Windows アプリケーション "Hello World"
- 64 ビット データ型と 32 ビット データ型の比較
- 32 ビット Delphi アプリケーションの 64 ビット Windows への変換
関連項目
- Windows と他のプラットフォームの相違点
- クロスプラットフォーム アプリケーションの開発
- クロスプラットフォーム アプリケーションのコンパイルとビルド
- クロスプラットフォーム アプリケーションのデバッグ
- Delphi 64 ビット コマンドライン コンパイラ: DCC64.EXE
- 64 ビット プログラミングとアセンブリ問題
- Win32 と Win64 の相違点 - FAQ
- 64 ビット入門(Matt Pietriek 著)
- PE ファイル形式についての詳細情報(Matt Pietriek 著)
- 小規模の C ランタイム ライブラリ:
- アセンブリ言語問題解決の手引き:
- Microsoft PE セクション名
