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

タイトル クラスライブラリを解してのプロセス間データ共有
投稿日: 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を構造体に渡す方法、もしくはマッピングファイル以外で
プロセス間でデータ共有できる方法をご教示いただきたく、お願いいたします。

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

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