以下の手法は、32ビットアプリケーションと64ビットアプリケーション間の通信に使用できます。
- 64ビットバージョンのWindowsでは、相互運用性のために32ビットハンドルを使用します。 32ビットアプリケーションと64ビットアプリケーション間でハンドルを共有する場合、重要なのは下位32ビットのみであるため、ハンドルを切り捨てるか(64ビットから32ビットに渡す場合)、ハンドルを符号拡張すること( 32ビットから64ビットに渡す場合)。共有できるハンドルには、ウィンドウ(HWND)などのユーザーオブジェクトへのハンドル、ペンやブラシ(HBRUSHおよびHPEN)などのGDIオブジェクトへのハンドル、ミューテックス、セマフォ、ファイルハンドルなどの名前付きオブジェクトへのハンドルがあります。
- リモートプロシージャコール(RPC)を使用できます。
- 使用するすべてのインターフェイスに32ビットと64ビットの両方のプロキシ/スタブDLLが登録されている場合、COM LocalServerを使用できます。
- ポインター依存型が適切に変換(または回避)されている場合は、共有メモリーを使用できます。
- CreateProcess関数とShellExecute関数は、32ビットまたは64ビットプロセスから32ビットまたは64ビットプロセスを起動できますが、特定の制限があります。
ファイルシステムリダイレクタがパスをリダイレクトするため、%windir%\ System32にある64ビットの実行可能ファイルを32ビットプロセスから起動できません。これを行うためにリダイレクトを無効にしないでください。代わりに%windir%\ Sysnativeを使用してください。詳細については、「ファイルシステムリダイレクター」を参照してください。