以下の手法は、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を使用してください。詳細については、「ファイルシステムリダイレクタ」を参照してください。
参考記事:Interprocess Communication Between 32-bit and 64-bit Applications