掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
バイト配列の読み出し (ID:139540)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
まず、処理を見直すべきかと。 Cなどと異なり、VB6にはポインタのキャストという概念やそれを行う仕組みが 存在しません。そのため、このようなことを実装しようとすれば面倒なことを しなければなりません。 で、エラー処理を省略すると、 Private Declare Sub CopyMemory _ Lib "kernel32.dll" Alias "RtlMoveMemory" _ (ByRef Dest As Any, ByRef Src As Any, _ Optional ByVal Length As Long = 4&) Private Declare Sub CopyMemoryFromSafeArray _ Lib "kernel32.dll" Alias "RtlMoveMemory" _ (ByRef RetPointer As Long, ByRef SrcArray() As Any, _ Optional ByVal Length As Long = 4&) Private Declare Function SafeArrayAllocDescriptor Lib "oleaut32.dll" _ (ByVal Dimensions As Long, ByRef RetArray() As Any) As Long Dim arIntegers() As Integer Dim arBytes() As Byte Dim iIntegerCount As Long Dim iByteCount As Long Dim pSafeArray As Long ' ここまでにarBytes、iIntegerCount、iByteCountに有効な値が入っている ' ものとする。arIntegersはEraced(未初期化)のままとする。 ' それぞれの配列の先頭のIndexは0と仮定しています。 Call SafeArrayAllocDescriptor(1&, arIntegers) Call CopyMemoryFromSafeArray(pSafeArray, arIntegers) Call CopyMemory(ByVal pSafeArray + 2&, &H12, 2&) Call CopyMemory(ByVal pSafeArray + 4&, 2&) Call CopyMemory(ByVal pSafeArray + 12&, VarPtr(arBytes(0&))) Call CopyMemory(ByVal pSafeArray + 20&, iIntegerCount) ' ここでarIntegersに対して各種処理をする。 ' その間、arIntegers及びarBytesどちらに対してもReDimやEraseは ' 使わないこと。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.