VB6についてお聞きしたいのですが、
ユーザ定義型からユーザ定義型へのデータの格納で
LSetを用いたいのですが、このユーザ定義型に動的配列
が含まれている場合は「型が一致しません」とエラーがでてしまいます。
色々と参考にさせて頂いて、ユーザ定義同士でも
CopyMemoryを用いれば動的配列があっても格納できると発見し
試してみましたが、格納内容がLSetのものと多少異なります。
理想はLSetと同じ格納内容をしたいのですが、手法が間違えています
でしょうか?以下にソースを記載しますので、ご教授下さい。
ユーザ定義型はString型からByte型の動的配列に格納です。
***実行確認結果**********************************************
=CopyMemoryで格納した場合=
Uss1.by1(1) = 49 <"1">
(2) = 49 <"1">
(3) = 49 <"1">
(4) = 32 <Space>
(5) = 32 <Space>
=LSetで格納した場合(こちらが理想の格納内容です)=
Uss1.by1(1) = 49 <"1">
(2) = 0 <NULL>
(3) = 49 <"1">
(4) = 0 <NULL>
(5) = 49 <"1">
(6) = 0 <NULL>
(7) = 32 <Space>
(8) = 0 <NULL>
(9) = 32 <Space>
(10)= 0 <NULL>
*************************************************************
***ソース****************************************************
'LSetで格納する場合、CopyMemoryで格納する場合を以下に記載します
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(destination As Any, source As Any, ByVal length As Long)
Private Type byteUser
'■■■LSetで格納する場合■■■
' by1(1 To 500) As Byte
' by2(1 To 500) As Byte
'■■■CopyMemoryで格納する場合■■■
by1() As Byte
by2() As Byte
End Type
Dim Uss1 As byteUser
Private Type strUser
st1 As String * 100
End Type
Dim Stt1 As strUser
Private Sub Form_Load()
Stt1.st1 = "111"
'■■■LSetで格納する場合■■■
' LSet Uss1 = Stt1
'■■■CopyMemoryで格納する場合■■■
ReDim Uss1.by1(1 To 500) As Byte
ReDim Uss1.by2(1 To 500) As Byte
Call CopyMemory(Uss1.by1(1), Stt1, LenB(Stt1.st1))
End Sub
*************************************************************
sttの値を一旦別の配列に格納してみてはどうですか?
Private Sub Command1_Click()
Dim strStt As String * 100
Dim bytArray() As Byte
strStt = "111"
bytArray = strStt
End Sub
GODさん、ご回答ありがとうございます。
できました!
なんか LSetにこだわり過ぎていたような気がします・・・。
ツイート | ![]() |