原創:vb6中用zlib.dll实现压缩/解压缩字节数组 http://www.chenoe.com/blog/article.asp?id=2046转贴请注明出处作者:塞北雪貂Option Explicit 'Declares Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long) Private Declare Function Compress Lib "zlibwapi.dll" Alias "compress" (dest As Any, destLen As Any, src As Any, ByVal srcLen As Long) As Long Private Declare Function uncompress Lib "zlibwapi.dll" (dest As Any, destLen As Any, src As Any, ByVal srcLen As Long) As LongPrivate Const OFFSET As Long = &H8'压缩数组 Public Function CompressByte(ByteArray() As Byte) As Boolean Dim BufferSize As Long Dim TempBuffer() As Byte 'Create a buffer to hold the compressed data BufferSize = UBound(ByteArray) + 1 BufferSize = BufferSize + (BufferSize * 0.01) + 12 ReDim TempBuffer(BufferSize)'Compress byte array (data) CompressByte = (Compress(TempBuffer(0), BufferSize, ByteArray(0), UBound(ByteArray) + 1) = 0)'Add the size of the original data Call CopyMemory(ByteArray(0), CLng(UBound(ByteArray) + 1), OFFSET)'Remove redundant data ReDim Preserve ByteArray(0 To BufferSize + OFFSET - 1) CopyMemory ByteArray(OFFSET), TempBuffer(0), BufferSize End Function'解压缩数组 Public Function UnCompressByte(ByteArray() As Byte) As Boolean Dim origLen As Long Dim BufferSize As Long Dim TempBuffer() As Byte 'Get the original size Call CopyMemory(OrigLen, ByteArray(0), OFFSET)'Create a buffer to hold the uncompressed data BufferSize = origLen BufferSize = BufferSize + (BufferSize * 0.01) + 12 ReDim TempBuffer(BufferSize)'Decompress data UnCompressByte = (uncompress(TempBuffer(0), BufferSize, ByteArray(OFFSET), UBound(ByteArray) - OFFSET + 1) = 0)'Remove redundant data ReDim Preserve ByteArray(0 To BufferSize - 1) CopyMemory ByteArray(0), TempBuffer(0), BufferSize End Function
http://www.chenoe.com/blog/article.asp?id=2046转贴请注明出处作者:塞北雪貂Option Explicit
'Declares
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
Private Declare Function Compress Lib "zlibwapi.dll" Alias "compress" (dest As Any, destLen As Any, src As Any, ByVal srcLen As Long) As Long
Private Declare Function uncompress Lib "zlibwapi.dll" (dest As Any, destLen As Any, src As Any, ByVal srcLen As Long) As LongPrivate Const OFFSET As Long = &H8'压缩数组
Public Function CompressByte(ByteArray() As Byte) As Boolean
Dim BufferSize As Long
Dim TempBuffer() As Byte
'Create a buffer to hold the compressed data
BufferSize = UBound(ByteArray) + 1
BufferSize = BufferSize + (BufferSize * 0.01) + 12
ReDim TempBuffer(BufferSize)'Compress byte array (data)
CompressByte = (Compress(TempBuffer(0), BufferSize, ByteArray(0), UBound(ByteArray) + 1) = 0)'Add the size of the original data
Call CopyMemory(ByteArray(0), CLng(UBound(ByteArray) + 1), OFFSET)'Remove redundant data
ReDim Preserve ByteArray(0 To BufferSize + OFFSET - 1)
CopyMemory ByteArray(OFFSET), TempBuffer(0), BufferSize
End Function'解压缩数组
Public Function UnCompressByte(ByteArray() As Byte) As Boolean
Dim origLen As Long
Dim BufferSize As Long
Dim TempBuffer() As Byte
'Get the original size
Call CopyMemory(OrigLen, ByteArray(0), OFFSET)'Create a buffer to hold the uncompressed data
BufferSize = origLen
BufferSize = BufferSize + (BufferSize * 0.01) + 12
ReDim TempBuffer(BufferSize)'Decompress data
UnCompressByte = (uncompress(TempBuffer(0), BufferSize, ByteArray(OFFSET), UBound(ByteArray) - OFFSET + 1) = 0)'Remove redundant data
ReDim Preserve ByteArray(0 To BufferSize - 1)
CopyMemory ByteArray(0), TempBuffer(0), BufferSize
End Function
http://blog.csdn.net/homezj
就是小吉优化的那个啊...,原版的超级慢,现在没见过那个小吉了。还有没有人能帮忙看看啊 多谢多谢啦
你的这个也很不错,不过能问你下 zlib.dll 是系统自带的嘛...
http://www.wfsoft.com/middleware_info.asp?id=16