タイトル : 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関係しか出て来ません。 |