Scheint so, als wenn unterschiedliche Packroutinen genutzt werden. Dachte eigentlich immer es
gäbe zur Zeit nur den Unterschied von x86 zu x64.
Ist mir bisher nicht aufgefallen, da ich unter jedem OS zlib verwende, was ja auch mitgeliefert wird.
Da klappts dann auch unter versch. OS, sowie x86_x64.
Hier der code:
Code:
; Autor: Thomas (ts-soft) Schulz
; PB-Version: 4.xx
; OS: windows/linux/MacOS
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Linux
ImportC #PB_Compiler_Home + "purelibraries/linux/libraries/zlib.a"
CompilerCase #PB_OS_MacOS
ImportC "/usr/lib/libz.dylib"
CompilerCase #PB_OS_Windows
ImportC "zlib.lib"
CompilerEndSelect
compress2(*dest, *destLen, *source, sourceLen, level)
uncompress(*dest, *destLen, *source, sourceLen)
EndImport
Procedure zipPackMemory(*source, sourceLen = #PB_Default, level = #PB_Default)
Protected *dest, destLen
If level < #PB_Default Or level > 9 : level = #PB_Default : EndIf
If *source
If sourceLen = #PB_Default : sourceLen = MemorySize(*source) : EndIf
destLen = sourceLen + 13 + (Int(sourceLen / 100))
*dest = AllocateMemory(destLen)
If *dest
If Not compress2(*dest, @destLen, *source, sourceLen, level)
*dest = ReAllocateMemory(*dest, destLen)
ProcedureReturn *dest
EndIf
EndIf
EndIf
EndProcedure
Procedure zipUnpackMemory(*source, *dest)
Protected sourceLen = MemorySize(*source)
Protected destLen = MemorySize(*dest)
If Not uncompress(*dest, @destLen, *source, sourceLen)
ProcedureReturn destLen
EndIf
EndProcedure
PS: die entpackte grösse schreibt man immer als Header zum Pack hinzu! Ausserdem noch eine
Prüfsumme (CRC, MD5 oder ähnlich).
Gruß
Thomas