![]() |
[zlib] AV beim freigeben vom CompressionStream
Hi Leute
Ich hab grad ein problem bei zLib. Ich verwende diesen Code um eine datei zu komprimieren:
Delphi-Quellcode:
Ich verwende die zLib version 1.2.3
procedure Compress(InputFileName, OutputFileName: string);
var InputStream, OutputStream: TFileStream; CompressionStream: ZLib.TCompressionStream; begin InputStream:=TFileStream.Create(InputFileName, fmOpenRead); try OutputStream:=TFileStream.Create(OutputFileName, fmCreate); try CompressionStream:=TCompressionStream.Create(clMax, OutputStream); try CompressionStream.CopyFrom(InputStream, InputStream.Size); finally CompressionStream.Free; //<--- hier kommt die AV end; finally OutputStream.Free; end; finally InputStream.Free; end; end; |
Re: [zlib] AV beim freigeben vom CompressionStream
*push*
|
Re: [zlib] AV beim freigeben vom CompressionStream
habs mal mit einem memory stream getestet und da bleibt er schon beim .Create hängen:
Delphi-Quellcode:
und zwar mit diesem fehler:
Memory := TMemoryStream.Create;
try Memory.LoadFromFile(cTestDatei); Memory.Position := 0; MemoryOUT := TMemoryStream.Create; try MemoryOUT.Size := Memory.Size; MemoryOUT.Position := 0; CompressionStream := TCompressionStream.Create(clMax, MemoryOUT); //<-- hier try CompressionStream.CopyFrom(Memory, Memory.Size); finally CompressionStream.Free; end; finally MemoryOUT.Free; end; finally Memory.Free; end; Memo.Lines.EndUpdate; end; Zitat:
|
Re: [zlib] AV beim freigeben vom CompressionStream
Weiß denn niemand rat?
Ich versteh die welt einfach nimmer ich schauf es nicht irgendwas mit zLib zusammen zu bekommen hab grad mal versucht zu dekomprimieren und erhalte den fehler des ich nich genug arbeitsspeicher hab und zwar hier:
Delphi-Quellcode:
Was mach ich falsch????? :wall:
function zlibAllocMem(AppData: Pointer; Items, Size: Integer): Pointer; cdecl;
begin // GetMem(Result, Items*Size); Result := AllocMem(Items * Size); end; |
Re: [zlib] AV beim freigeben vom CompressionStream
Da scheint wohl irgendwas mit deiner Zlib Version nicht zu stimmen, dein Code aus dem ersten und der aus dem 3. Post funktionieren einwandfrei unter Turbo Delphi mit Zlib 1.0.4.
BTW: Im 3. Post hat sich ein Fehler eingeschlichen: dadurch, dass die Größe des OutPutStreams auf die des Inputstreams gesetzt wird, werden hinten an den komprimierte Output soviele $00 angehängt, das er wieder genau so groß ist wie der Input ;) |
Re: [zlib] AV beim freigeben vom CompressionStream
Zitat:
den wie oben erwähnt hab ich die von pngdelphi geklaut weil ich sie nirgends gefunden hab. hab aber grad endeckt des pngdelphi noch die version 1.1.4 benutzt Wo bekomm ich den die dateien in der aktuellesten version her? Zitat:
|
Re: [zlib] AV beim freigeben vom CompressionStream
*push* :duck:
|
Re: [zlib] AV beim freigeben vom CompressionStream
Ich werde es morgen mal mit BDS2006 testen auf Arbeit, aber ich weise gleich darauf hin, dass wir dort die PNGImage einsetzen und die direkten C Quellen und nicht die Objekte. Dabei sind die C Quellen auf dem neusten Stand (1.2.3 afair) und werden direkt in eine LIB compiliert und dann entweder von Delphi per $L angezogen oder hat von C++. Ich werde es mal testen und Bescheid geben. Wenn ich es vergesse, nochmal nachhaken bitte...
|
Re: [zlib] AV beim freigeben vom CompressionStream
ahm ja vllt kannst du mir ja die .obj schicken oder mir sagen wie man die in der neusten version erstellt
hab ja auch BDS2006 |
Re: [zlib] AV beim freigeben vom CompressionStream
*nachhack* und?
|
Re: [zlib] AV beim freigeben vom CompressionStream
Toll, natürlich vergessen. Ok, habe mir es als Termin im PDA eingetragen - mit Alarm - für morgen.
Grundlegend: statische Library anlegen, die C Quellen hinein tun. Die Optionen die in der Batch angegeben wurden zum compilieren, kann man alle in der Oberfläche bei den Projektoptionen wiederfinden und entsprechend setzen. Damit erstellt die Lib schon die .OBJ. Das Ausgabeverzeichnis der statischen LIB muss in den das Unit Sucherverzeichnis des Pascal Projektes, welches die PNGImage bzw. deine Compressionstreams beinhaltet (also die {$L alder32.obj} etc enthält). Danach einfach eine Gruppe erstellen, wo die statische Lib vor dem Pascal Projekt kommt. Dann ist die Gruppe mit dem Make Tool (bzw. unter zu Hilfenahme von bdsproj2mak) auf der Kommandozeile compilierbar, genauso wie in der Oberfläche. Ich werde es morgen machen... /EDIT: Zitat:
|
Re: [zlib] AV beim freigeben vom CompressionStream
ok danke
Weiß nicht ob ich die erklärung ganz verstanden hab aber des kann ich eh erst morgen probieren |
Re: [zlib] AV beim freigeben vom CompressionStream
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich habe es getestet und <trommelwirbel> kein Fehler </trommelwirbel> gefunden bzw. gehabt. Er komprimiert mir ganz kleine Dateien sowie recht grosse (250 MB) ohne Probleme. Ich habe es zum einen mit der zlib von Borland getestet, welche beim BDS2006 mit bei ist und zum anderen mit der zLibEx von den zLib Delphi Implementationen. Dort habe ich die neuen originalen C Quellen übersetzt und dann genutzt. Das Projekt funktioniert genauso gut ohne Fehler, produziert aber ein minimal grösseres Ergebnis (10 KB mehr bei 250 MB), was wohl der neuen zLib Version geschuldet ist.
Ich habe im Anhang eine Projektgruppe, welche folgendes enthält: 1. ein Delphiprojekt zur Nutzung der Originalen Borland Routinen (so wie du es gepostet hast) 2. eine C++ LIB für die Generierung einer LIB, die OBJs sowie der .hpp für die zLib Quellen 3. ein C++ Projekt welches die LIB nutzt und die zLibEx um gleiches zu erreichen. Auf Wunsch kann ich ja mal mit dem BDS die jeweiligen EXEn und LIBs erzeugen und die kannst du dann ja mal vergleichen, ob es einen binären Unterschied zu deinen erstellten Versionen gibt. System: Windows XP SP2 (32 Bit), BDS2006, Update pack 2 + HF 10, 11, 12 |
Re: [zlib] AV beim freigeben vom CompressionStream
Hi
danke auf jedenfall Habs jetzt endlich zum laufen bekommen :mrgreen: (nachdem ich alles gelöscht und neu probiert hab) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:32 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz