VB.NETでのメモリマップドファイル(共有メモリ)へのアクセス
- 題名: VB.NETでのメモリマップドファイル(共有メモリ)へのアクセス
- 著者: さざんか
- 日時: 2007/03/13 17:52:18
- ID: 19304
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: VB.NETでのメモリマップドファイル(共有メモリ)へのアクセス
- 著者: シャノン
- 日時: 2007/03/13 18:08:14
- ID: 19305
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: VB.NETでのメモリマップドファイル(共有メモリ)へのアクセス
- 著者: シャノン
- 日時: 2007/03/13 18:21:19
- ID: 19308
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: VB.NETでのメモリマップドファイル(共有メモリ)へのアクセス
- 著者: Hongliang
- 日時: 2007/03/13 18:57:37
- ID: 19309
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: VB.NETでのメモリマップドファイル(共有メモリ)へのアクセス
- 著者: シャノン
- 日時: 2007/03/13 20:51:13
- ID: 19310
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: VB.NETでのメモリマップドファイル(共有メモリ)へのアクセス
- 著者: シャノン
- 日時: 2007/03/13 20:53:59
- ID: 19311
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: VB.NETでのメモリマップドファイル(共有メモリ)へのアクセス
- 著者: さざんか
- 日時: 2007/03/14 9:24:33
- ID: 19312
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: VB.NETでのメモリマップドファイル(共有メモリ)へのアクセス
- 著者: さざんか
- 日時: 2007/03/14 14:51:29
- ID: 19319
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
【解決したい問題】
C++で作成されたアプリケーションとの連携のため、メモリマップドファイル(共有メモリ)によるデータ取得をVB.NETで行おうとしておりますが、どのようにすれば共有メモリにアクセスできるかわからず、お知恵をお借りできますでしょうか。
【解決するために何をしたか】
http://www.athomejp.com/goldfish/api/sharedmemory.asp
こちらを参照し、CreateFileMapping及びMapViewOfFileを利用することとしました。
<DllImport("kernel32.dll")> _
Public Function CreateFileMapping(ByVal hFile As IntPtr, _
ByVal lpFileMappingAttributes As IntPtr, ByVal flProtect As UInt32, ByVal dwMaximumSizeHigh As UInt32, _
ByVal dwMaximumSizeLow As UInt32, ByVal lpName As String) As IntPtr
End Function
<DllImport("kernel32.dll")> _
Public Function MapViewOfFile(ByVal hMap As IntPtr, _
ByVal AccessMode As UInt32, ByVal OffsetHigh As UInt32, ByVal OffsetLow As UInt32, _
ByVal MapSize As UInt32) As IntPtr
End Function
上記サイトを参考に、共有メモリの作成、初期化を以下のように行い
Private MemoryMappedFile As IntPtr = &HFFFFFFFF
Private MemorySize As UInt32 = 256
Private ShareName As String = "MyShare"
Dim hFileMap As IntPtr
----
Try
hFileMap = CreateFileMapping(MemoryMappedFile, Nothing, PageAttribute.PAGE_READWRITE, 0, MemorySize, ShareName)
If hFileMap = 0 Then
MsgBox("失敗")
Return
End If
Catch ex As Exception
MsgBox(ex.Message)
Return
End Try
Dim hMap As IntPtr
Try
hMap = MapViewOfFile(hFileMap, FileDesiredAccess.FILE_MAP_ALL_ACCESS, 0, 0, 0)
If hMap = 0 Then
MsgBox("Fail")
CloseHandle(hFileMap)
hFileMap = Nothing
Return
End If
Catch ex As Exception
MsgBox(ex.Message)
Return
End Try
ZeroMemory(hMap, MemorySize)
UnmapViewOfFile(hMap)
エラー等なく、上記処理を行えるところまで確認したのですが、この共有メモリに対しByte()配列を書き込む/読み込む為にはどうすればよいか、で壁に当たってしまいました。
【追加事項】
ReadFile/WriteFile等ではなく、MapViewOfFileで返されるポインタへアクセスすればよいと思うのですが、VB.NETではどうすればよいかわからず、基本的な事だとは思いますが、ご教授願えますでしょうか。
お願いいたします