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

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

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

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