var
FS:TfileStream;
tempstream:tmemorystream;
buffer:array of byte;
begin FS:=tfilestream.Create('123.tmp',fmOpenReadWrite or fmShareDenyNone); tempstream:=tmemorystream.Create;
fs.Position:=0;
tempstream.CopyFrom(fs,0);//把123.tmp全部拷贝到内存流
setlength(buffer,2048);
ZDecompress(tempstream,1024,pointer(buffer),2048);// 1024 2048指大小,假设123.tmp压缩前是2048 压缩后是1024,调用 ZDecompress解压缩
tempstream.write(buffer,2048) ;//解压缩后的数据流存入tempstream。。
这里是zlib的ZDecompress原型
procedure ZDecompress(const inBuffer: Pointer; inSize: Integer;
out outBuffer: Pointer; out outSize: Integer; outEstimate: Integer = 0);我想利用zlib的ZDecompress把123.tmp进行解压然后保存解压后的文件,关键是这个ZDecompress不知道怎么用,我上面的代码肯定是错的,请问该怎么修改啊,最近被指针搞得要死,谢谢大家
FS:TfileStream;
tempstream:tmemorystream;
buffer:array of byte;
begin FS:=tfilestream.Create('123.tmp',fmOpenReadWrite or fmShareDenyNone); tempstream:=tmemorystream.Create;
fs.Position:=0;
tempstream.CopyFrom(fs,0);//把123.tmp全部拷贝到内存流
setlength(buffer,2048);
ZDecompress(tempstream,1024,pointer(buffer),2048);// 1024 2048指大小,假设123.tmp压缩前是2048 压缩后是1024,调用 ZDecompress解压缩
tempstream.write(buffer,2048) ;//解压缩后的数据流存入tempstream。。
这里是zlib的ZDecompress原型
procedure ZDecompress(const inBuffer: Pointer; inSize: Integer;
out outBuffer: Pointer; out outSize: Integer; outEstimate: Integer = 0);我想利用zlib的ZDecompress把123.tmp进行解压然后保存解压后的文件,关键是这个ZDecompress不知道怎么用,我上面的代码肯定是错的,请问该怎么修改啊,最近被指针搞得要死,谢谢大家
单元名: uZlibClass.pas
功能 : 简单压缩 -- Zlib
作者 : Duo
日期 :2010-04-28 22:04:09
说明 :压缩解压 流,文件
-------------------------------------------------------------------------------}
unit uZlibClass;interfaceuses Windows,SysUtils,Classes,ZLib,Forms;type
TZlibOnProgressEvent = procedure (AFileSize,AFilePos:Int64) of object;
TZlibClass=class
private
FFilePos: Int64;
FFileSize: Int64;
FOnProgress: TZlibOnProgressEvent;
procedure CsProgress(Sender:TObject); // 压缩
procedure DsProgress(Sender:TObject); // 解压
public
procedure CompressionStream(ASourceStream,ATargetStream:TMemoryStream);
procedure DecompressionStream(ASourceStream,ATargetStream:TMemoryStream);
procedure CompressionFile(const ASourceFile,ATargetFile:TFileName);
procedure DecompressionFile(const ASourceFile,ATargetFile:TFileName);
property FileSize:Int64 read FFileSize;
property FilePos:Int64 read FFilePos;
property OnProgress:TZlibOnProgressEvent read FOnProgress write FOnProgress;
end;implementation{ TZlibClass }procedure TZlibClass.CompressionFile(const ASourceFile, ATargetFile: TFileName);
var fs,ms:TMemoryStream;
begin
fs:=TMemoryStream.Create;
ms:=TMemoryStream.Create;
try
fs.LoadFromFile(ASourceFile);
CompressionStream(fs,ms);
ms.SaveToFile(ATargetFile);
finally
FreeAndNil(ms);
FreeAndNil(fs);
end;
end;procedure TZlibClass.CompressionStream(ASourceStream,ATargetStream:TMemoryStream);
var cs:TCompressionStream;
begin
FFileSize:=ASourceStream.Size;
ATargetStream.Write(FFileSize,SizeOf(FFileSize));
cs:=TCompressionStream.Create(clMax,ATargetStream);
try
cs.OnProgress := CsProgress;
ASourceStream.SaveToStream(cs);
finally
FreeAndNil(cs);
end;
end;procedure TZlibClass.CsProgress(Sender: TObject);
begin
FFilePos:=TCompressionStream(Sender).Position;
if Assigned(FOnProgress) then FOnProgress(FFileSize,FFilePos);
Application.ProcessMessages;
end;procedure TZlibClass.DecompressionFile(const ASourceFile,
ATargetFile: TFileName);
var fs,ms:TMemoryStream;
begin
fs:=TMemoryStream.Create;
ms:=TMemoryStream.Create;
try
fs.LoadFromFile(ASourceFile);
DecompressionStream(fs,ms);
ms.SaveToFile(ATargetFile);
finally
FreeAndNil(ms);
FreeAndNil(fs);
end;
end;procedure TZlibClass.DecompressionStream(ASourceStream,ATargetStream:TMemoryStream);
var ds:TDecompressionStream;
begin
ASourceStream.Position:=0;
ASourceStream.ReadBuffer(FFileSize,SizeOf(FFileSize));
ATargetStream.SetSize(FFileSize);
ds:=TDecompressionStream.Create(ASourceStream);
try
ds.OnProgress:=DsProgress;
ds.Read(ATargetStream.Memory^,FFileSize);
finally
FreeAndNil(ds);
end;
end;procedure TZlibClass.DsProgress(Sender: TObject);
begin
FFilePos:=TDecompressionStream(Sender).Position;
if Assigned(FOnProgress) then FOnProgress(FFileSize,FFilePos);
Application.ProcessMessages;
end;end.
tempstream.write(buffer[0],2048);
请问我想调用动态库,C++ 的 函数里有个参数是指针形的。我在delphi里怎么用啊?