Compress data using zlib compression.
Public Declare Function COMPR_Compress Lib "diCrPKI.dll" (ByRef lpOutput As Byte, ByVal nOutBytes As Long, ByRef lpInput As Byte, ByVal nInputLen As Long, ByVal nOptions As Long) As Long
nRet = COMPR_Compress(lpOutput(0), nOutputLen, lpInput(0), nInputLen, 0) ' Note the "(0)" after the byte array parameters
long __stdcall COMPR_Compress(unsigned char *lpOutput, long nOutBytes, const unsigned char *lpInput, long nInputLen, long nOptions);
The number of bytes successfully copied into the output buffer or the required size in bytes. If an error occurs, it returns a negative error code.
Public Function comprCompress
(lpInput() As Byte, Optional nOptions As Long = 0) As Byte()
static bvec_t dipki::Compr::Compress (const bvec_t &data)
static Compr.compress(data)
To determine the required size of the output buffer, call the function with nOutBytes set to zero (or lpOutput set to NULL).
Dim strPlain As String Dim strBack As String Dim abPlain() As Byte Dim abCompressed() As Byte Dim nCompLen As Long Dim nUncompLen As Long Dim nRet As Long ' COMPRESSSION (deflation) ' Set the plaintext message strPlain = "hello, hello, hello. This is a 'hello world' message " & _ "for the world, repeat, for the world." ' Convert to an array of bytes abPlain = StrConv(strPlain, vbFromUnicode) nUncompLen = UBound(abPlain) + 1 ' Find required compressed length by calling with zero length value nCompLen = COMPR_Compress(0, 0, abPlain(0), nUncompLen, 0) ReDim abCompressed(nCompLen - 1) ' Now compress plaintext Call COMPR_Compress(abCompressed(0), nCompLen, abPlain(0), nUncompLen, 0) Debug.Print "Compressed " & nUncompLen & " bytes to " & nCompLen ' DECOMPRESSSION (inflation) ' Uncompress the compressed data ' Find the required length of uncompressed data nUncompLen = COMPR_Uncompress(0, 0, abCompressed(0), nCompLen, 0) Debug.Print "Required uncompressed length is " & nUncompLen & " bytes" ReDim abPlain(nUncompLen - 1) nRet = COMPR_Uncompress(abPlain(0), nUncompLen, abCompressed(0), nCompLen, 0) ' Convert back to a string strBack = StrConv(abPlain, vbUnicode) Debug.Print strBack
Compressed 90 bytes to 68 Required uncompressed length is 90 bytes hello, hello, hello. This is a 'hello world' message for the world, repeat, for the world.
Dim strPlain As String Dim lpToCompress() As Byte Dim lpCompressed() As Byte Dim lpUncompressed() As Byte strPlain = "hello, hello, hello. This is a 'hello world' message " & _ "for the world, repeat, for the world." lpToCompress = StrConv(strPlain, vbFromUnicode) lpCompressed = comprCompress(lpToCompress) Debug.Print "OK= " & "789CCB48CDC9C9D751C840A2F4144232328B15802851411D2CA2509E5F9493A2AE909B5A5C9C989EAA90965FA45092910A11D651284A2D484D2CD14115D6030086D11F4E" Debug.Print "COMPRESSED=" & cnvHexStrFromBytes(lpCompressed) lpUncompressed = comprUncompress(lpCompressed) Debug.Print "'" & StrConv(lpUncompressed, vbUnicode); "'"