32ビットアプリケーションと64ビットアプリケーション間のプロセス間通信

32ビットアプリケーションと64ビットアプリケーション間の通信には、次の手法を使用できます。

  • 64ビットバージョンの Windows では、相互運用性のために32ビットハンドルを使用します。 32ビットアプリケーションと64ビットアプリケーションの間でハンドルを共有する場合は、下位の32ビットのみが重要であるため、(64 ビットから32ビットに渡すときに) ハンドルを切り捨てたり、ハンドルを (32 ビットから64ビットに渡すときに) 符号を拡張したりすることが安全です。 共有できるハンドルには、windows (HWND) などのユーザーオブジェクトへのハンドル、ペンやブラシなどの GDI オブジェクトへのハンドル (Hbrush および hbrush)、ミューテックス、セマフォ、ファイルハンドルなどの名前付きオブジェクトへのハンドルなどがあります。
  • リモートプロシージャコール (RPC) を使用できます。
  • COM LocalServers は、使用されるすべてのインターフェイスに対して32ビットと64ビットの両方のプロキシ/スタブ Dll が登録されている場合に使用できます。
  • 共有メモリは、ポインターに依存する型が適切に変換される (または回避される) 場合に使用できます。
  • CreateProcessおよび ShellExecute関数は、特定の制限がある32ビットプロセスまたは64ビットプロセスから32ビットおよび64ビットのプロセスを起動できます。

ファイルシステムリダイレクターがパスをリダイレクトするため、% windir% System32 にある64ビットの実行可能ファイルを \ 32 ビットプロセスから起動できません。 この操作を行うには、リダイレクトを無効にしないでください。代わりに% windir% \ sysnative を使用してください。 詳細については、「 ファイルシステムリダイレクター」を参照してください。