本帖最后由 taki_feng 于 2014-09-23 00:01:25 编辑

解决方案 »

  1.   

    如果你要将这样一个结构用于读取二进制文件的缓存,那还是用含有固定长度元素的结构,或者用 Redim 过在单纯的 Byte 数组。实际上,当你将一个 Type 中的元素声明为不定长时,它会被在内存中另开缓冲区。看下面的例子:Option Explicit
    Private Type test2
        byteTemp1 As Byte
        byteTemp2 As Byte
        byteTemp3 As Byte
        byteTemp4 As Byte
        byteTemp5() As Byte
    End TypePrivate Sub Command1_Click()
    Dim t2 As test2
    Dim i As Long
        
        Debug.Print Len(t2)
        ReDim t2.byteTemp5(0 To 255)
        Debug.Print Len(t2)
        For i = 0 To 255
            t2.byteTemp5(i) = 255
        Next i
        Debug.Print Len(t2)
        
    End Sub
    打印结果:
    8
    8
    8你试试 Get #1, Adress2, t2.byteTemp5 是否能成功。
      

  2.   

    好像这样用不了的,也没这么用过。要是我会采用变通方法:
    Private Type test2
        byteTemp1(3) As Byte
        byteTemp2() As Byte
    End Type
    Sub tets()
        Dim t2 As test2, iNum As Integer
        iNum = FreeFile()
        ReDim t2.byteTemp2(10)
        Open "e:\test1.gif" For Binary As #iNum
        Get #iNum, 1, t2.byteTemp1
        Get #iNum, 5, t2.byteTemp2
        Close #iNum
    End Sub
      

  3.   

    啰嗦一句,所读到的 8,其中 4 是 4 个 Byte,另外的 4 是指向可变长缓存的地址。
      

  4.   

    “另外的 4 ”是一个 SAFEARRAY* 指针,数据指针要在 SAFEARRAY 结构中取。
      

  5.   

    直接读应该是不行的。
    字段多有什么关系,封装成函数不就行了。
    如果成员没有字符串,固定长度部分可以直接用字节数组读取,然后用CopyMemory复制。