Seite 1 von 1

.

Verfasst: 14.06.2012 10:18
von NoUser
.

Re: JCALG1 und 64Bit

Verfasst: 14.06.2012 10:36
von NicTheQuick
Moment....

Warum sollte der Packer nicht unter 64-Bit laufen? Ich sehe davon in der Hilfe nichts (wobei man der auch nicht immer glauben darf).

Und wieso geht's dann plötzlich um den Adressraum? Verstehe ich nicht. Erklär mal genauer, was du meinst.

Re: JCALG1 und 64Bit

Verfasst: 14.06.2012 10:45
von NoUser
.

Re: JCALG1 und 64Bit

Verfasst: 14.06.2012 10:56
von ts-soft
NicTheQuick hat geschrieben:Warum sollte der Packer nicht unter 64-Bit laufen? Ich sehe davon in der Hilfe nichts (wobei man der auch nicht immer glauben darf)
Weil PureBasic BriefLZ unter x64 nimmt, d.h. mit PB unter x86 gepackte Dateien lassen sich unter x64 nicht entpacken und versa vice.

Dies, sowie weitere Unzulänglichkeiten haben mich ja veranlasst das zBin Packer SDK zu schreiben :wink:

Re: JCALG1 und 64Bit

Verfasst: 14.06.2012 10:59
von NicTheQuick
Also der Code aus der Hilfe funktioniert bei mir 1a, auch wenn ich nur 4 GB RAM habe und der schon zu 3 GB ausgereizt ist. Man sollte allerdings vorher den darin enthaltenen Fehler beheben und aus 'SizeOf(Long)' ein 'SizeOf(Integer)' machen.

Code: Alles auswählen

Dim Tableau(10) ; Tabelle mit 11 Elementen

; Füllen der Tabelle
For i=0 To 10
	Tableau(i) = i
Next

If CreatePack("/tmp/test.pak")
	; Hinzufügen und Komprimieren der Daten der Tabelle
	AddPackMemory(@Tableau(), SizeOf(Integer)*11, 9)
	ClosePack()
EndIf

; Setzen der Tabelleninhalte auf Null
For i=0 To 10
	Tableau(i) = 0
Next

; Öffnen der gepackten Datei
If OpenPack("/tmp/test.pak")
	*Pointeur=NextPackFile() ; Liest und entpackt den Speicherbereich
	Taille=PackFileSize()    ; Ermittelt die Größe des Speicherbereichs
	; Kopiert den entpackten Speicherbereich in die Tabelle
	CopyMemory(*Pointeur, @Tableau(), Taille)
	ClosePack()
EndIf

; Lesen der Tabelle
For i=0 To 10
	Debug Tableau(i) 
Next
Ansonsten kannst du es unter Windows sowieso vergessen Daten mit mehr als 4 GB innerhalb eines Prozesses zu verarbeiten. Siehe dazu Wikipedia unter 4-GB-Grenze und das darin enthaltene Zitat:
Unter Windows kann ein einzelner 32bit-Prozess generell nicht mehr als 2 GB belegen, außer IMAGE_FILE_LARGE_ADDRESS_AWARE ist im Header der Anwendung aktiviert (dann sind bis zu 3 GB möglich auf einem 32bit-Windows, bzw. 4 GB auf einem 64bit-Windows).
Mit einem Streaming-fähigen Packer wäre das allerdings trotzdem möglich.

///Edit:
ts-soft hat geschrieben:
NicTheQuick hat geschrieben:Warum sollte der Packer nicht unter 64-Bit laufen? Ich sehe davon in der Hilfe nichts (wobei man der auch nicht immer glauben darf)
Weil PureBasic BriefLZ unter x64 nimmt, d.h. mit PB unter x86 gepackte Dateien lassen sich unter x64 nicht entpacken und versa vice.

Dies, sowie weitere Unzulänglichkeiten haben mich ja veranlasst das zBin Packer SDK zu schreiben :wink:
Scheiße, ich hab doch gewusst, dass da irgendwas war. *Kopf -> Tisch*

Re: JCALG1 und 64Bit

Verfasst: 15.06.2012 15:10
von NoUser
.

Re: JCALG1 und 64Bit

Verfasst: 15.06.2012 16:55
von ts-soft
Eine schlanke Exe bekommst Du auch mit der zlib.lib:

Code: Alles auswählen

ImportC "zlib.lib"
  uncompress(*dest, *destLen, *source, sourceLen)
EndImport

Procedure zipUnpackMemory(*source, *dest)
  Protected sourceLen = MemorySize(*source)
  Protected destLen = MemorySize(*dest)

  If Not uncompress(*dest, @destLen, *source, sourceLen)
    ProcedureReturn destLen
  EndIf
EndProcedure
Ich weiß jetzt nicht wie groß der Import ist, aber viel größer wird er nicht sein.

Gruß
Thomas

Re: JCALG1 und 64Bit

Verfasst: 16.06.2012 02:21
von NoUser
.

Re: JCALG1 und 64Bit

Verfasst: 16.06.2012 12:26
von Rings
irgend jemand hatte den entpack-teil von jcalg nach x64 portiert.
allerdings weiss ich nicht mehr wer es war, ob hier oder im engl. forum.