- PR -

VB2005で構造体2次元配列に1次元配列をコピーする方法

1
投稿者投稿内容
てんさん
会議室デビュー日: 2006/10/14
投稿数: 8
投稿日時: 2006-11-18 22:58
VB2005を使用して現在構造体の2次元配列のデータに
1次元配列のデータをcopymemory関数を使ってコピーさせています。

その結果コピーが終わった後の構造体配列が2次元から1次元に変わって
しまいます。

Imports System.Runtime.InteropServices
Public Module MdlTest
***構造体宣言***
Public Structure A
Public aaa As Short
End Structure

Public Structure B
<VBFixedArray(2,2) , MarshalAs(UnmanagedType.ByValArray, sizeconst:=4)>_
Public sAAA(,) As A
public Sub initialize()
ReDim sAAA(1,1)
End Sub
End Structure

***CopyMemory用API関数定義***
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As MdlTest.B , ByRef Source As Short, ByVal Length As Integer)
End Module

Public Class Form1
'ボタン1クリック時処理
Private Sub Button1_Click(ByVal sender As System.Object, Byval e As ...
***構造体実体宣言***
Dim sBBB As New B
sBBB.initialize()
***配列宣言***
Dim Buf(3) As Short

For i As Integer = 0 To 3
Buf(i) = i + 1
Next

CopyMemory (sBBB, Buf(0), 4 * 2)
End Sub
End Class

ここでsBBBの内容は(2,2)の配列だったのですが、
CopyMemory関数を実行した後はなぜかsBBBの配列が(3)に
なってしまいます。

どのようにしたら2次元配列のままコピーができるのでしょうか。。。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-11-18 23:10
引用:

てんさんさんの書き込み (2006-11-18 22:58) より:
VB2005を使用して現在構造体の2次元配列のデータに
1次元配列のデータをcopymemory関数を使ってコピーさせています。

その結果コピーが終わった後の構造体配列が2次元から1次元に変わって
しまいます。

Imports System.Runtime.InteropServices
Public Module MdlTest
***構造体宣言***
Public Structure A
Public aaa As Short
End Structure

Public Structure B
<VBFixedArray(2,2) , MarshalAs(UnmanagedType.ByValArray, sizeconst:=4)>_
Public sAAA(,) As A
public Sub initialize()
ReDim sAAA(1,1)
End Sub
End Structure

***CopyMemory用API関数定義***
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As MdlTest.B , ByRef Source As Short, ByVal Length As Integer)
End Module

Public Class Form1
'ボタン1クリック時処理
Private Sub Button1_Click(ByVal sender As System.Object, Byval e As ...
***構造体実体宣言***
Dim sBBB As New B
sBBB.initialize()
***配列宣言***
Dim Buf(3) As Short

For i As Integer = 0 To 3
Buf(i) = i + 1
Next

CopyMemory (sBBB, Buf(0), 4 * 2)
End Sub
End Class

ここでsBBBの内容は(2,2)の配列だったのですが、
CopyMemory関数を実行した後はなぜかsBBBの配列が(3)に
なってしまいます。

どのようにしたら2次元配列のままコピーができるのでしょうか。。。


クロスポストかよ。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34998&forum=7
1

スキルアップ/キャリアアップ(JOB@IT)