[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/02/17(Thu) 14:10
投稿者名:ダンボ
URL :
タイトル:
2次元のバイト配列の途中に読み込ませる
済みません。楽して聞いていいですか?
2次元のバイト配列の2番目の列にデータを読み込ませたいのですが、コーディングに苦労してます。
例えば、SBUF(1,0)〜SBUF(1,4095)に読み込ませたいときに、

Dim SBUF(2, 4095) As Byte
  ReadFile 1, 1, SBUF(1, *) … 文法に無いので当然コンパイルエラー
  ReadFile 1, 1, SBUF(1, 0) … 「次元が違う」
  ReadFile 1, 1, SBUF(1)    … 「次元が違う」
  ReadFile 1, 1, SBUF()     … コンパイルエラーにはならないが、配列の先頭に読み込まれる

Private Sub ReadFile(FNUM As Integer, ROFFSET As Long, BUF() As Byte)
  Get FNUM, ROFFSET, BUF()

投稿時間:2005/02/17(Thu) 14:32
投稿者名:ガッ
Eメール:
URL :
タイトル:
Re: 2次元のバイト配列の途中に読み込ませる
> Dim SBUF(2, 4095) As Byte
>   ReadFile 1, 1, SBUF(1, *) … 文法に無いので当然コンパイルエラー
>   ReadFile 1, 1, SBUF(1, 0) … 「次元が違う」
>   ReadFile 1, 1, SBUF(1)    … 「次元が違う」
>   ReadFile 1, 1, SBUF()     … コンパイルエラーにはならないが、配列の先頭に読み込まれる
>
> Private Sub ReadFile(FNUM As Integer, ROFFSET As Long, BUF() As Byte)
>   Get FNUM, ROFFSET, BUF()
途中で切られた・・・?
ま、それはおいといて、
VBの配列(SafeArrayか…)がいかなるときでも、連続して配置されていれば、
ちょっとは楽できるかもしれない。

> SBUF(1,0)〜SBUF(1,4095)に読み込ませたい
仮の配列x(0 to 4095)を作成し、それに一旦読み込ませ、メモリ上のデータをコピーすればいい。

「VBの配列(SafeArrayか…)がいかなるときでも、連続して配置されていれば」
WinAPIのMoveMemoryで一発でできると思われる。

あと、配列のレイアウトを変えてもいいならユーザ定義型にすると楽かと思われる。

※…多分。

投稿時間:2005/02/17(Thu) 14:43
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re: 2次元のバイト配列の途中に読み込ませる
単純にループで1つずつ入れていくとか(^^;

Dim SBUF(2, 4095) As Byte
  ReadFile 1, 1, 1

Private Sub ReadFile(FNUM As Integer, ROFFSET As Long, BUF As Integer)
    Dim bytTemp(4095) As Byte
    
    Get FNUM, ROFFSET, bytTemp()

    For i = 0 To 4095
        SBUF(BUF, i) = bytTemp(i)
    Next i
End Sub

投稿時間:2005/02/17(Thu) 16:58
投稿者名:ダンボ
URL :
タイトル:
(解決)2次元のバイト配列の途中に読み込ませる
ガッさん、 LESIAさん、いつもお世話になっています。

私がコーリング規約を知らないだけかと思ったら、そうでもないようですね。
小手先の呼び出し方を模索するよりも、ユーザ型を定義した方がよりスマートだと
思い直しましたので、下記の様にします。アドバイスどうもありがとうございました。

Const BSIZE = 4096
Private Type BINARY_ACCESS
  FNUM As Integer
  FNAME As String
  FLEN As Long
  OFFSET As Long
  BUF(BSIZE) As Byte
End Type
Dim FAT(n) As BINARY_ACCESS

ReadFile FAT(0).FNUM, FAT(0).OFFSET, FAT(0).BUF