掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB.netで構造体をメモリコピーするには? (ID:109986)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
質問させてください。 私はVB6では、タスク間でメモリを共有する時にマップファイルを使用していました。 同じ事をVB.netでやろうとしているのですが、 構造体をRtlMoveMemoryにてマップファイルに渡そうとすると、 マーシャリングできない、というエラーが出ます。 //////////////// Code ///////////////////////////// Imports System.Runtime.InteropServices Public Class Test ''メモリコピー関数 ''As Anyだと怒られるので、渡す型に変えました。 Declare Sub MemCopy Lib "kernel32" Alias "RtlMoveMemory" (ByRef hpvDest As STRC_TEST, ByVal hpvSource As Integer, ByVal cbCopy As Integer) <StructLayout(LayoutKind.Sequential)> Structure STRC_TEST Dim A As Long Dim B() As Integer Public Sub Initialize() ReDim B(3) End Sub End Structure Private Sub fncTest() Dim Test As STRC_TEST Dim Test2 As STRC_TEST Dim fhdTest As Integer ''ファイルハンドル Dim mhdTest As Integer ''作成したマップファイルハンドル Dim pntAdrTest As Integer ''マップファイルのポインタ Dim opnMapTest As Integer ''オープンしたマップファイルのハンドル ''構造体内の配列の初期化 Test.Initialize() ''値をセット Test.A = 1 Test.B(0) = 2 Test.B(1) = 3 Test.B(2) = 4 Test.B(3) = 5 ''ファイル作成 intFn = FreeFile() FileOpen(intFn, "Test.tmp", OpenMode.Binary) ''ファイルに上の構造体を書き込み FilePut(intFn, Test) ''ファイルを閉じる FileClose(intFn) ''マップファイル作成 fhdTest = CreateFile関数にて"Test.tmp"を開く mhdTest = CreateFileMapping関数にて"Test.Map"を作成 opnMapTest = OpenFileMapping関数にて"Test.Map"をオープン pntAdrTest = MapViewOfFile関数にてTest.Mapのアドレスを取得 ''pntAdrTestからの24バイトには、上のTest構造体の値が入っている ''はずなので、RtlMoveMemoryにてTest2構造体にムーブメモリーしたい。 Call MemCopy(Test2 , pntAdrTest , 24) ''↑ここでエラーが出ます 型 STRC_TEST のフィールド B をマーシャリングできません : この型は構造体フィールドとして、マーシャリングできません。 ''以下略 End Class マーシャリングについていろいろとヘルプを見たりしましたが、 イマイチよく理解できません・・・ VB.netにて、「構造体をメモリコピーにてマップファイルに渡す」方法をソースコード付きで教えていただけないでしょうか?
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.