###発生している問題・エラーメッセージ
vb6からvb.net化作業中です。
メモリマップドファイルを使用し、c++からvb.netへデータの受け渡しを行っています。
メモリを読み込むためにメモリコピーを行うもエラーが出てしまいます。
知恵を貸してください。
エラーメッセージ
保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
###該当のソースコード
vb.net
1ここにご自身が実行したソースコードを書いてください
Public Class
Private Declare Function OpenFileMapping Lib "kernel32" Alias "OpenFileMappingA" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal lpName As String) As Integer
Private Declare Function MapViewOfFile Lib "kernel32" (ByVal hFileMappingObject As Integer, ByVal dwDesiredAccess As Integer, ByVal dwFileOffsetHigh As Integer, ByVal dwFileOffsetLow As Integer, ByVal dwNumberOfBytesToMap As Integer) As Integer
Private Declare Sub readMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Dest As ALARM_MAP, ByRef Source As Object, ByVal Length As Integer)
Private x(1) As X
Private Sub A() Map = OpenFileMapping(FILE_MAP_READ, False, pcsBKU_ALM_MAP) lpView = MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0) x(1).Initialize() Call ZeroMemory(x(1), Marshal.SizeOf(x(1))) Call readMemory(x(1), lpView, Marshal.SizeOf(x(1))) Exit Sub End Sub
End Class
<StructLayout(LayoutKind.Sequential)> _
Structure ALARM_MAP
Dim Num As Integer
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=6)> _
Public Dummy As Short()
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=200)> _
Public Alm As ALRM()
Public Sub Initialize()
Me.Dummy = New Short(6 - 1) {}
Me.Alm = New ALRM(200 - 1) {}
Dim i As Integer
For i = 0 To 200 - 1
Me.Alm(i).Initialize()
Next
End Sub
<StructLayout(LayoutKind.Sequential)> _
Structure ALRM_SUMMARY
Dim No As Short
Dim flash As Byte
Dim Type As Byte
Dim Imp As Byte
Dim Re As Byte
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> _
Public Dummy1 As Byte()
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=16)> _
Public Name As String
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=12)> _
Public Dummy2 As Byte()
Public Sub Initialize() Me.Dummy1 = New Byte(2 - 1) {} Me.Dummy2 = New Byte(12 - 1) {} Me.Name = New Char(16 - 1) {} End Sub
End Structure
c++
構造体定義
typedef struct A{
U16 No;
U8 flash;
U8 Type;
U8 Imp;
U8 re;
I16 Dumy;
char Name[16];
I16 Dummy[6];
}a;
typedef struct B{
I32 Num;
I16 Dummy[6];
a alm[200];
}b;
###試したこと
課題に対してアプローチしたことを記載してください
###補足情報(言語/FW/ツール等のバージョンなど)
省略しているため、おかしな点などがあったら申し訳ございません。
より詳細な情報
あなたの回答
tips
プレビュー