質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

0回答

3741閲覧

vb.net メモリマップドファイル

kurokiwakaba

総合スコア6

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2017/11/14 11:55

###発生している問題・エラーメッセージ
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/ツール等のバージョンなど)
省略しているため、おかしな点などがあったら申し訳ございません。
より詳細な情報

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KoichiSugiyama

2017/11/15 10:42

どんなエラーがどこで発生しているか、エラーメッセージなどを記載していただいた方が、適切な回答が得られやすいです。
umyu

2017/11/17 12:56

1,ソースコードは見やすいようにコードタグで囲ってください。2,C++側の書き込み処理はどーなってますか。3,C++側からの書き込み終了を判断するためにMutex等をソースでは使用していませんが、読み込み時にメモリマップがあるという保証をどのように担保してますか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問