タイトル | : クラスライブラリを解してのプロセス間データ共有 |
記事No | : 6213 |
投稿日 | : 2007/09/01(Sat) 23:24 |
投稿者 | : キジ |
VB2005(SP1) .NET Framwork2.0です。 掲題のように、クラスライブラリを解してのVB2005で作成した2つのプロセス (仮称Task1、Task2)の間で構造体のデータを共有させたいと試行錯誤しています。 手段として、マッピングファイルを使用しています。
<Serializable()> Public NotInheritable Class SharedMemory ・ ・ ・ Structure ShmArea Dim intNo As Integer End Structure Public mstShmArea As New ShmArea Private m_address As IntPtr ・ ・ ・ Public Sub New(ByVal strMAPFILENAME As String)
m_hFileMap = OpenFileMapping(FILE_MAP_ALL_ACCESS, False, strMAPFILENAME)
If m_hFileMap.Equals(IntPtr.Zero) Then Call MsgBox("Create!") m_hFileMap = CreateFileMapping(InvalidHandleValue, _ IntPtr.Zero, PAGE_READWRITE, 0, Len(mstShmArea), strMAPFILENAME) End If
If (m_hFileMap.Equals(IntPtr.Zero)) Then Call MsgBox("Error1") Else m_address = MapViewOfFile(m_hFileMap, FILE_MAP_ALL_ACCESS, 0, 0, IntPtr.Zero) End If
If (m_address.Equals(IntPtr.Zero)) Then Call MsgBox("Error2") Else CopyMemory(mstShmArea, m_address, Len(mstShmArea)) 'mstShmArea = Marshal.PtrToStructure(m_address, GetType(ShmArea)) 'mstShmArea = CType(Marshal.PtrToStructure(m_address, GetType(ShmArea)), ShmArea) End If End Sub End Class
mstShmAreaを共有しようとしています。 マッピングファイル自体の共有といいいますか、オープンはうまくいっているようなのですが Task1で書き込んだ値がTask2で読み込めていません。 Task2でmstShmArea.intNoは常に0です。Task1で自分が書き込んで読み返したのは ネットで調べて、マッピングファイルのアドレスを構造体に渡す方法を CopyMemoryやMarshal.PtrToStructureで試したりしましたがどれもうまくいきません。
取得したm_addressを構造体に渡す方法、もしくはマッピングファイル以外で プロセス間でデータ共有できる方法をご教示いただきたく、お願いいたします。
|