编程时遇到的,function GetBin()  '读取二进制图片
   set oAs=CreateObject("adodb.stream")
   oAs.Type=1
   oAs.mode=3
   oAs.Open
   oAs.LoadFromFile "测试图片.jpg"
   oAs.Position=0
   GetBin=oAs.Read(-1)
   oAs.close
end function
 
Sub WriteBin()
   dim lngFileNum
   lngFileNum=FreeFile
   Open "输出图片.jpg" for binary as #lngFileNum
   Put #lngFileNum,,GetBin()       '<---------------错误处
end Sub我在写图片文件时,用上述方法,出现“输出图片”比输入图片大大约10个字节的问题,分析后发现时Variant的类型头。我把函数改成下情况后正常:   lngFileNum=FreeFile
   Open "输出图片.jpg" for binary as #lngFileNum
dim binTmp() as byte
   binTmp=GetBin()
   Put #lngFileNum,,binTmp
请教
为什么会出现这种情况,GetBin()不是返回的是byte()类型吗,怎么会有variant和byte()两种形式???

解决方案 »

  1.   

    就读个文件,用得着用Stream吗?public function ReadChunk(byval pathname as string) as byte()    dim l   as long
        dim v() as byte
        
        l = filelen(pathname)      ' 验证文件是否存在
        l = freefile()
        
        open pathname for binary as l
            redim v(lof(l)-1)
            get l,,v()
        close l
        
        ReadChunk = v()
        
    end function
       
       dim binTmp() as byte
       lngFileNum=FreeFile
       
       binTmp() = ReadChunk("测试图片.jpg")
       
       Open "输出图片.jpg" for binary as #lngFileNum
       'binTmp=GetBin()    //这句代码不应该放这里,因为有可能开始写文件时却读文件失败。
       Put #lngFileNum,,binTmp()
       Close lngFileNum
      

  2.   

    stream是我用来举例的,我要问得问题是为什么函数Byte()返回时,为什么直接写会出现variant头
      

  3.   

    function GetBin()  '读取二进制图片
    =================================
    改成function GetBin() as byte()就可以了
    明确指定函数返回byte(),而不是variant