- PR -

C#でプロセス間でメモリ共有するには

投稿者投稿内容
しん
ベテラン
会議室デビュー日: 2008/05/27
投稿数: 63
投稿日時: 2008-11-12 19:05
URL閲覧しました。ありがとうございます。

Aプロセス⇒共有メモリ⇒Bプロセス

Aプロセスでデータベースから取得したデータを一時的に共有メモリ領域に格納し、
Bプロセスの中で格納したデータを取得したいのですが、
取得する際に、Aプロセスで共有メモリに格納したアドレスAを
BプロセスでアドレスAを取得する理想的な方法はあるでしょうか?
方法はいくつかあると思うのですが、ご教授願います。


Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2008-11-12 19:15
CreateFileMapping を使う場合、ファイルマッピングオブジェクトを取得するための文字列さえ共通ならアドレスを意識する必要はありません。
しん
ベテラン
会議室デビュー日: 2008/05/27
投稿数: 63
投稿日時: 2008-11-13 11:22
Hongliangさんありがとうございます。
下記のURLを参考にさせて頂いてます。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=27142&forum=7

Aプロセス⇒共有メモリ⇒Bプロセス
-----------------------------------
上記の処理をAプロセスとして作成。
Aプロセスで共有メモリをセットした内容をBプロセスで取得する際の
処理で参考になるurlがありましたらご教授ください。



しん
ベテラン
会議室デビュー日: 2008/05/27
投稿数: 63
投稿日時: 2008-11-13 14:30
Aプロセス⇒共有メモリ⇒Bプロセス
--------------------------------

Bプロセスの処理で共有メモリから値を取得する際に
Marshal.PtrToStructure関数を使って値を取得したいのですがXXXX=Marshal.PtrToStructure関数
XXXXの定義方法について、どのように記述したらいいのでしょうか?
知っている方がいらっしゃいましたらご教授ください。
しん
ベテラン
会議室デビュー日: 2008/05/27
投稿数: 63
投稿日時: 2008-11-13 14:43
すいません。
下記のコーディングで構造体定義の部分がわかりません。
どなたかご教授ください。

public struct Point
{
 /// どのような定義になるのでしょうか?
}
Point anotherP;
anotherP = (Point)Marshal.PtrToStructure(m_memAreaPointer,typeof(Point));
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-11-13 15:00
質問の意図がわかりません…。構造体そのものがわからないのですか?
それとも、ある構造体があって、それを PtrToStructure でやりとりできる形にするにはどう書き直せばいいのかが分からないんですか?
もし後者だったら「構造体 マーシャリング」あたりで検索してみるといいのではないかな。

by 同じようなことを数年前にやったけど、すっかり忘れている人
しん
ベテラン
会議室デビュー日: 2008/05/27
投稿数: 63
投稿日時: 2008-11-13 15:27
ありがとうございます。

下記のコーディングについては、マーシャルオブジェクトで記述するとおもうのですが
どのような構造で定義(型等の情報)したらいいかわからないのですが、
参照URL等わかる方がいらっしゃいましたら、ご教授ください。
-------------------------------------------------------------
public struct Point
{
 /// どのような定義になるのでしょうか?
}
Point anotherP;
anotherP = (Point)Marshal.PtrToStructure(m_memAreaPointer,typeof(Point));
-------------------------------------------------------------
ぴあちゃん
ぬし
会議室デビュー日: 2008/02/07
投稿数: 287
投稿日時: 2008-11-13 16:00
構造体 マーシャリング

これが回答だと思うのですが、探した結果をもってこい、って言うなら
聞く場所を間違えていると思いますよ。

スキルアップ/キャリアアップ(JOB@IT)