tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^2: クラスライブラリを解してのプロセス間データ共有
投稿日: 2007/09/03(Mon) 18:27
投稿者キジ
> > プロセス間でデータ共有できる方法
>
> ".NET Remoting" とか…。


まず本文訂正させてください。
「Task1で自分が書き込んで読み返したのは・・・」の続きを書き忘れていました。
「Task1で自分が書き込んで読み返したのは、うまくいっています」です。

魔界の仮面弁士 さんありがとうございます。
リモーティングですか・・・。
これも以前からちょっとテストしたりしてましたが、あまり手軽そうでもないし
知人から今後残る技術かどうか疑問(←これ本当ですかね?)との意見もあり躊躇しております。



すこし分かってきたような気がします。
Marshal.PtrToStructureやStructureToPtrについて誤解しているような気がしてきました。
MarshalというのはC言語でいうところの
    pAdr = MapViewOfFile(hMemMapFile, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(ShmArea));
としたとき、
    stpShm = (ShmArea *)pAdr;    //(stpShmはShmArea構造体の変数ポインタ)
ではなく
    memcpy(stpShm, pAdr, sizeof(ShmArea));
ではないでしょうか?
これだと、共有構造体にデータを読み書きする都度PtrToStructureやStructureToPtrで
共有ポインタpAdrからデータをコピーしてきてやらないといけませんよね。
よしんばそれを行ったとしても構造体ということから、あるメンバ1つに書き込みするのに、
pAdrという先頭アドレスから構造体全部を書き込むと、
他プロセスから書いた他のメンバのデータまでもが上書きされちゃいますよね。
なら毎回pAdrから目的のメンバのオフセットポインタを割り出しますか・・・?


VB2005にて上記の
stpShm = (ShmArea *)pAdr;
のようなアドレス渡しってできないんでしょうか?
色々調べましたが、どうしてもMarshal関係しか出て来ません。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。