• ベストアンサー

別のプロセスの関数を呼び出す方法はありますか?

別のプロセスの関数を呼び出す方法はありますか? WINDOWSでプロセスAとプロセスBがあり、 プロセスBの関数ポインタをプロセスAで取得するところまではできるのですが、 この後、プロセスAからプロセスBの関数をコールバックする方法はありますか? アドレス空間はプロセスごとに固有であるため、 通常のコールバックではうまくいかないと思うのですが・・・。 尚、プロセスAとプロセスBは、異なるプログラムです。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

おっしゃる通りプロセスAのアドレスはプロセスBにとって無意味な数値です。 プロセス間通信でプロセスAの関数の結果をプロセスBで受け取る方法があります。  ※プロセスAとBが改変できる事が前提 Windowsであれば、SendMessage(MsgはWM_COPYDATA)を使って別プロセスにデータを送信可能です。 関数実行の要求はプロセスB→プロセスA、 関数の結果を受け取るにはプロセスA→プロセスBにSendMessageします。

_hitoshi_
質問者

お礼

できればプロセスBのスレッドでプロセスAの関数をコールしたかったのですが、 やはり難しそうですね。 回答ありがとうございました。

_hitoshi_
質問者

補足

>できればプロセスBのスレッドでプロセスAの関数をコールしたかったのですが、 プロセスAとプロセスBが逆でした。すみません。

その他の回答 (2)

回答No.3

参考までに WindowsおよびLinuxでは プロセスごとに仮想メモリー空間が構成されます。 従って、プロセスが異なると、仮想メモリー空間が異なるため 互いのアドレスは意味がありません。 (前回答のとおり) なんらかのプロセス間通信を使う以外に情報をやりとりをする方法 はありません。 ちなみに、プロセスとは、リソース(メモリーをふくめた)の 管理単位でもあります。 また、スレッドとは並行処理され得る最小単位のことで プロセスは複数のスレッドから構成されます。 同一プロセスのスレッド同士はリソースを共有するので スレッド同士なら、メモリーアドレスは意味を持つでしょう。

_hitoshi_
質問者

お礼

ありがとうございました。

  • nak777r
  • ベストアンサー率36% (49/136)
回答No.2

方法は有ります が、実際の作り方は、私は全く知りません。 やり方としては、OLEオートメーションサーバーとして最初から プロセスBのプログラムを設計、作成してやれば出来ると思います。 EXCEL のOLEオートメーションのアレです

_hitoshi_
質問者

お礼

回答ありがとうございました。 じっくり勉強してみます。

関連するQ&A

専門家に質問してみよう