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