64 ビット Windows アプリケーション開発
Delphi でも C++Builder でも、Win64 開発システムかネイティブ Win32 開発システムのどちらかで 64 ビット Windows アプリケーションを開発できます。
目次
FMX、VCL、RTL による 64 ビット Windows アプリケーション開発のサポート
RAD Studio の 3 つのライブラリでは、Win32 と Win64 を以下のようにサポートしています。
- FireMonkey ライブラリ(FMX)では、サポートされているターゲット プラットフォームをすべてサポートしています。
- VCL と RTL は、64 ビット アプリケーションでも 32 ビット アプリケーションの場合と同じように動作するよう修正されました。つまり、VCL や RTL のみを使用する場合は、Win64 プラットフォームにも Win32 プラットフォームにも同じソース コードを使用できると期待することができます。
32 ビット Windows と 64 ビット Windows 用に別個の実行可能ファイルが必要
ビジュアル コンポーネントを使用する場合は、2 つの別個のアプリケーションをコンパイルし、そのそれぞれを異なるターゲット プラットフォームで構成する必要があります(たとえば、一方は Win32 向け、もう一方は Win64 向けなど)。そうすれば、Win32 向けの .EXE と Win64 向けの別の .EXE ができ、それぞれは適切なターゲット プラットフォームを持つように[プロジェクト マネージャ]で構成されます。設計時に使用する必要があるコンポーネント、パッケージ、ライブラリは、Win32 版と 64 ビット版の両方が存在しなければなりません。
IDE で 64 ビット Windows アプリケーションを構成する
64 ビット Windows プラットフォームをターゲットにするには、下図のように、[プロジェクト マネージャ]で[ターゲット プラットフォーム]ノードに[64 ビット Windows]プラットフォームを追加する(既に追加されている場合はアクティブにする)必要があります。
開発用に 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 が必要
RAD Studio での 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 アプリケーションを実行、デバッグ、配置するには、以下が必要です。
- 64 ビット Windows ターゲット システムにプラットフォーム アシスタントをインストールして実行すること。
- 64 ビット Windows ターゲット システムの PAServer への接続について記述した接続プロファイルを Win32 開発システム上で作成すること。
- [プロジェクト マネージャ]で、64 ビット Windows ターゲット プラットフォームにこの接続プロファイルを割り当てること。
プラットフォーム アシスタントおよび接続プロファイルの使い方の詳細は、「マルチデバイス アプリケーション作成のステップ」を参照してください。
標準の Ethernet LAN かリモート デスクトップ接続のどちらかを使って、64 ビット Windows PC に接続できます。詳細は、「32 ビット PC を Win64 PC に接続する」を参照してください。
メモ: Win64 ターゲットで Windows ファイアウォールが有効になっている場合は、PAServer が Win64 ターゲットに初めて接続する際に Windows ファイアウォールのメッセージが表示される可能性があります。その場合は、[paserver.exe にこれらのネットワークでの通信を許可する]で[プライベート ネットワーク]が選択された状態で[アクセスを許可する]をクリックします。
64 ビット Windows アプリケーションのデバッグ
一般に、RAD Studio での 64 ビット Windows アプリケーションのデバッグは、32 ビット Windows アプリケーションのデバッグと非常に似ています。つまり、違いはほとんどありません。[FPU]ビューなどの一部の CPU ウィンドウで違いが現れる程度です。
- C++ 64 ビット Windows アプリケーションのデバッグの場合は、一部のデバッガ機能が使用できません。詳細は、「C++Builder 64 ビット Windows アプリケーションのデバッグ」を参照してください。
- 64 ビット Windows 上の開発システムを使用する場合は、64 ビット Windows アプリケーションの実行もデバッグもその開発システム上で行え、別個のターゲット システムに接続する必要はありません。
- 32 ビット Windows 開発システムを使用する場合、RAD Studio では、64 ビット Windows アプリケーションをデバッグするにはそれを配置する必要があります。つまり、実行時に 64 ビット Windows システムへのライブ接続を確保する必要があります。
詳細は、「マルチデバイス アプリケーションのデバッグ」を参照してください。
64 ビット Windows アプリケーションの配置
- プラットフォーム アシスタントと接続プロファイルを使用する場合は、配置マネージャを使用して 64 ビット Windows アプリケーションを配置できます。
- 64 ビット Windows 開発システムを使用している場合に配置マネージャを使用するには、配置先のターゲット システムについて記述した接続プロファイルを作成する必要があります。
「マルチデバイス アプリケーションの配置」を参照してください。
64 ビット アプリケーションについての考慮事項
64 ビット Windows のコンポーネント、パッケージ、ライブラリには 32 ビット設計時版が必要
64 ビット Windows のコンポーネント、パッケージ、ライブラリを作成する場合、アプリケーション開発時に IDE でそのコンポーネント/パッケージ/ライブラリを使用したければ、32 ビット Windows 設計時版も作成しておく必要があります。この要件は、IDE が 32 ビット Windows プログラムであることに起因します。
たとえば、[コンポーネントの新規作成]ウィザードを使用する場合、まず 32 ビット Windows 版のコンポーネントを作成する必要があります。その後、[ターゲット プラットフォーム]を 64 ビット Windows に設定し([プロジェクト マネージャ]で)、Win64 コンポーネントとしてもう一度コンポーネントをコンパイルします。RAD Studio からの出力ファイル(.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 を使用しなければなりません。
C:\Program Files (x86)\Embarcadero\Studio\19.0\bin64\tlibimp.exe
C++Builder の場合は、「#import から TLIBIMP.EXE への C++ コードの移行」を参照してください。
コンポーネントを設計時および実行時に使用できるようにする
コンポーネントが各プラットフォームで使用可能かどうかを IDE が判断する方法は以下の 2 とおりあります (ここでいう "使用可能" とは、パレットに表示され、IDE によってチェックが行われれるという意味です。IDE では、コンポーネント ユニットが存在することを確認する以外に、コンパイル時のチェックは行いません)。
どちらの方法も、コンポーネントを実装した Win32 実行時(または設計時および実行時)パッケージに組み込まれているデータに基づいています。IDE では Win32 以外のプラットフォーム用にビルドされたパッケージを読み込めないため、情報については Win32 パッケージに従う必要があります。
- RAD Studio のビルド システムでは、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 関連のトピック
- 開発環境の準備(開発用システムが Win32 の場合のみ):
- Win64 アプリケーションの作成と実行:
関連項目
- Windows と OS X との相違点
- マルチデバイス アプリケーションの開発
- マルチデバイス アプリケーションのコンパイルとビルド
- マルチデバイス アプリケーションのデバッグ
- DCC64.EXE - Delphi 64 ビット コマンドライン コンパイラ
- Win32 と Win64 の相違点 - FAQ
- 64 ビット入門(Matt Pietriek 著)
- MSDN x64 ソフトウェア規約
- Prolog と Epilog
- MSDN 例外処理(x64)
- 64 ビット ドライバ用浮動小数点サポート
- x64 最適化コードのデバッグ
- MSVC x64 コマンド プロンプトについての詳細情報
- PE ファイル形式についての詳細情報(Matt Pietriek 著)
- 小規模の C ランタイム ライブラリ:
- Microsoft PE セクション名
- C コンパイラのパッキング問題
- IPF、x86、x64 の Windows データ アラインメント