- ベストアンサー
COM(EXE)を用いたプロセス間のポインタ
複数のプロセスの間にEXEタイプのCOMを用意し、Clientであるプロセスにおいて、new等を用いてヒープ領域のメモリを確保します。 COMに対して確保した領域のポインタを渡し、COMの内部でそのポインタを保持させ、他のプロセスがそのポインタを取得し、他方のClientプロセスが作成したデータを参照するといったことは可能なのでしょうか? 開発環境は、WinXP、VC++6.0です。 ご教授お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
昔のOSならともかく、いまのWindowsではメモリ保護がかかっているので、各プロセスが独立したメモリ空間を与えられています。よって、各プロセスから他のプロセスで確保されたメモリ空間にアクセスすることはできません。 ただ、それでは困ることもあるのでWindowsでは メールスロット 名前付きパイプ メモリマップドファイル という機能を提供しています。 このうち、メモリマップドファイルをつかえば、メモリ共有が可能となります。 比較的簡単に実装できますので、あそんでみられてはいかがですか? HPで検索されれば結構サンプルも当たるとおもいます。
その他の回答 (1)
- sha-girl
- ベストアンサー率52% (430/816)
結論からいうと無理です。 何故かというとWindowsのnewやmalloc(要はAPIのHeapAlloc)で返されるメモリは 仮想メモリ空間のアドレスであり、 仮想メモリ空間というのはプロセス毎に割り当てられるからです。 メモリをプロセス間で共有したいのであれば CreateFileMappingやVirtualAllocEx(2000/Xpのみ) 等を使ってはどうでしょうか? http://www.02.246.ne.jp/~torutk/cxx/sharedmemory/win32_shmem.html http://techtips.belution.com/ja/vc/0001/
お礼
ご回答ありがとうございます。 お返事が大変遅くなってしまいました、申し訳ありませんでした。