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