掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
構造体へのRtlMoveMemoryでOutOfMemory? (ID:100282)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
VB.net2003にて、FORTRANのexeファイルが出力した文字列を 共有メモリを介してVBで取得する機能を作っています。 タイマーにより逐次データを取得する仕組みなのですが 徐々にメモリを消費し、OutOfMemoryとなってしまいます。 Private Declare Sub CopyMemoryStruct Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As SEND_DATA, ByVal Source As Integer, ByVal Length As Integer) '構造体定義 <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _ Public Structure STRUCT_DATA <VBFixedString(DataLength), MarshalAs(UnmanagedType.ByValTStr, SizeConst:=DataLength)> _ Dim msg As String ReadOnly Property getMsg() As String Get Return msg End Get End Property Sub msgSet(ByVal str As String) msg = str End Sub End Structure 'データ取得メソッド Private Sub getDataMethod(...) Dim data As STRUCT_DATA Dim str As String Dim lpFileMap As Integer '共有メモリのマッピングアドレス '構造体にデータを格納 CopyMemoryStruct(data, lpFileMap, Marshal.SizeOf(data)) str = sendData.getMsg() 'ここでstrを用いた処理を行いますが何もなくても 'OutOfMemoryになります End Sub 複数のマッピングファイルに対してこのメソッドを呼ぶ構成です。 マッピングファイルのオープン/クローズは このメソッドの呼び出し元で行っています。 上のプログラムで何かしら原因となる箇所がありましたら ご指摘いただけますでしょうか。 このメソッドを抜けたときに構造体dataは メモリから解放されると思っているのですが。 VBでの構造体及び共有メモリについて明るくないので 的外れな質問をしているかもしれませんが、 どうぞよろしくお願いいたします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.