メモリマップドファイルを使用してプロセス間で文字列の受け渡しを
行いたいのですが、メモリへの書き込みがうまくいかずに困っています。
開発環境
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様、この度は本当にありがとうございました。
助かりました。
ツイート | ![]() |