掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB2005でバイト配列をコピーするには (ID:144418)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
VB2005でバイト配列をコピーするには どなたかご教授下さい。 VB6で作成したプログラムをVB2005にコンバートしました。構造体からなる配列変数を一つの配列変数にコピー したいのですが、構造体の最初のメンバーだけ値が同じで以降の値は正しくセットされていませんでした。 どのように記述したらよいのでしょうか。またCopymMemory以外で良い方法があればご教授下さい。 よろしくお願い致します。実際のソースも最後にのせました。 ===概略=== Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Byte, ByRef Source As Byte, ByVal Length As Short) 構造体定義 (コピー元) <StructLayout(LayoutKind.Sequential)>Structure ST_MOTO <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Dim byte_strTranCd() As Byte <MarshalAs(UnmanagedType.ByValArray, SizeConst:=5)> Dim byte_strTanSeq() As Byte <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Dim byte_strTxtNo() As Byte <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> Dim byte_strTxtSeq() As Byte End Structure Dim A As ST_MOTO (コピー先) <StructLayout(LayoutKind.Sequential)> Structure ST_SAKI Dim lngrecLen As Integer 'データのLength <MarshalAs(UnmanagedType.ByValArray, SizeConst:=100)> Dim bytrecData() As Byte 'データ End Structure Dim B As ST_SAKI Call CopyMemory(B.bytrecData(0), A.byte_strTranCd(0), 14) 出力結果 B.bytrecData(0) =80 A.byte_strTranCd(0) =80 B.bytrecData(1) =50 A.byte_strTranCd(1) =50 '最初の構造体のメンバーの値は正しく設定されている B.bytrecData(2) =57 A.byte_strTranCd(2) =57 B.bytrecData(3) =50 A.byte_strTranCd(3) =50 B.bytrecData(4) =0 A.byte_strTanSeq(0) =80 B.bytrecData(5) =0 A.byte_strTanSeq(1) =87 B.bytrecData(6) =0 A.byte_strTanSeq(2) =48 'これ以降は正しくない。(VB6だと正しく設定されている) B.bytrecData(7) =0 A.byte_strTanSeq(3) =48 B.bytrecData(8) =6 A.byte_strTanSeq(4) =55 ・ ・ ・ ・ VB6ソース Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Integer) Type BYTE_RQ_H byte_strTranCd(3) As Byte byte_strTanSeq(4) As Byte byte_strTxtNo(1) As Byte byte_strTxtSeq(2) As Byte End Type Type BYTE_RQ byte_AREA_H As BYTE_RQ_H End Type Dim byte_Send As BYTE_RQ Type REC_HOST lngrecLen As Long 'データのLength bytrecData(99) As Byte 'データ End Type Dim HostSend As REC_HOST Sub SendData '以下処理の実行前に変数の初期化並びに、byte_Send.byte_AREA_Hの各変数には値が設定されています。 Call CopyMemory(HostSend.bytrecData(0), byte_Send.byte_AREA_H.byte_strTranCd(0), 14) End Sub VB2005ソース Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Byte, ByRef Source As Byte, ByVal Length As Short) <StructLayout(LayoutKind.Sequential)>Structure BYTE_RQ_H <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Dim byte_strTranCd() As Byte <MarshalAs(UnmanagedType.ByValArray, SizeConst:=5)> Dim byte_strTanSeq() As Byte <MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Dim byte_strTxtNo() As Byte <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> Dim byte_strTxtSeq() As Byte End Structure Structure BYTE_RQ byte_AREA_H As BYTE_RQ_H End Type Dim byte_Send As BYTE_RQ <StructLayout(LayoutKind.Sequential)> Structure REC_HOST '送受信用レコード Dim lngrecLen As Integer 'データのLength <MarshalAs(UnmanagedType.ByValArray, SizeConst:=100)> Dim bytrecData() As Byte 'データ End Structure Dim HostSend As REC_HOST Sub SendData '以下処理の実行前に変数の初期化並びに、byte_Send.byte_AREA_Hの各変数には値が設定されています。 Call CopyMemory(HostSend.bytrecData(0), byte_Send.byte_AREA_H.byte_strTranCd(0), 14) End Sub
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.