メモリマップドファイルを使用してプロセス間で文字列の受け渡しを
行いたいのですが、メモリへの書き込みがうまくいかずに困っています。
開発環境
Windows7 Professional SP1
Visual Studio 2010 Professional
以下、書き込み処理部分
Dim str as String = "sample"
Dim bytdat As Byte() = System.Text.Encoding.Unicode.GetBytes(str)
Using mmf As MemoryMappedFile = MemoryMappedFile.CreateOrOpen("MMF", 128)
  Using accessor As MemoryMappedViewAccessor = mmf.CreateViewAccessor
      accessor.WriteArray(Of Byte)(0, bytdat, 0, bytdat.Length)
  End Using
End Using
書き込んだ(つもり)メモリからデータを読み込むとNULLが返ってきます。
ソースの記述に間違いがあればご指摘願います。
どうかご教授の程、宜しくお願い致します。
非永続化なのでDisposeで内容がクリアされてしまいます。
Disposeはすべての箇所で使い終わったところで行うようにする必要があります。
http://msdn.microsoft.com/ja-jp/library/vstudio/dd997372.aspx
例)
Imports System.IO.MemoryMappedFiles
Imports System.Text
Public Class Form1
    Private mmf As MemoryMappedFile = Nothing
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        If mmf Is Nothing Then
            mmf = MemoryMappedFile.CreateOrOpen("MMF", 128)
        End If
        Dim bytDat = Encoding.UTF8.GetBytes(TextBox1.Text)
        Using acc = mmf.CreateViewAccessor()
            acc.Write(0, bytDat.Length)
            acc.WriteArray(Of Byte)(4, bytDat, 0, bytDat.Length)
        End Using
    End Sub
    Private Sub Button2_Click(sender As Object, e As System.EventArgs) Handles Button2.Click
        If mmf Is Nothing Then
            mmf = MemoryMappedFile.CreateOrOpen("MMF", 128)
        End If
        Using acc = mmf.CreateViewAccessor()
            Dim leng = acc.ReadInt32(0)
            Dim bytDat(leng - 1) As Byte
            acc.ReadArray(Of Byte)(4, bytDat, 0, leng)
            TextBox2.Text = Encoding.UTF8.GetString(bytDat)
        End Using
    End Sub
    Private Sub Button3_Click(sender As Object, e As System.EventArgs) Handles Button3.Click
        If mmf IsNot Nothing Then
            mmf.Dispose()
            mmf = Nothing
        End If
    End Sub
End Class
shu様
早々のご回答ありがとうございます。
shu様の書き込み処理のソースをコピーしたらすんなりいけました。
明日、自分のソースとの違いを精査しようと思います。
解決致しました。
MemoryMappedFileの宣言の際にUsingを使用していたのが、
原因だったようです。
End UsingのタイミングでDisposeするようですね。
shu様、この度は本当にありがとうございました。
助かりました。
| ツイート |   |