//下载
procedure DownFile;
begin
//....
DownMemory(Stream, ASize); //下载Stream
SendMessage(Handle, WM_DOWN_MSG, Integer(Stream.Memory), ASize);
end;
//接受数据
procedure GetDownMsg(var Msg: TMessage);
var
Stream: TMemoryStream;
ASize: Int64;
begin
Stream := TMemoryStream.Create;
try
//Stream.Memory := DWORD(Msg.WParam); //这个地方这么做?必须用CopyMemory吗?能不能直接指针赋值就行了?
//ASize := Int64(Msg.LParam);
//...
_FileStream.Position := _FileStream.Size;
FileStream.CopyFrom(Stream, Stream.Size);
finally
FreeAndNil(Stream);
end;
end
procedure DownFile;
begin
//....
DownMemory(Stream, ASize); //下载Stream
SendMessage(Handle, WM_DOWN_MSG, Integer(Stream.Memory), ASize);
end;
//接受数据
procedure GetDownMsg(var Msg: TMessage);
var
Stream: TMemoryStream;
ASize: Int64;
begin
Stream := TMemoryStream.Create;
try
//Stream.Memory := DWORD(Msg.WParam); //这个地方这么做?必须用CopyMemory吗?能不能直接指针赋值就行了?
//ASize := Int64(Msg.LParam);
//...
_FileStream.Position := _FileStream.Size;
FileStream.CopyFrom(Stream, Stream.Size);
finally
FreeAndNil(Stream);
end;
end
end;procedure GetDownMsg(var Msg: TMessage);
var
Stream: TMemoryStream;
ASize: Int64;
begin
Stream := TMemoryStream.Create;
try
TMyMemoryStream(Stream).SetPointer(DWORD(Msg.WParam), Msg.LParam);
//Stream.Memory := DWORD(Msg.WParam); //这个地方这么做?必须用CopyMemory吗?能不能直接指针赋值就行了?
//ASize := Int64(Msg.LParam);
//...
_FileStream.Position := _FileStream.Size;
FileStream.CopyFrom(Stream, Stream.Size);
finally
FreeAndNil(Stream);
end;
end
var
Count: Longint;
begin
Stream.Position := 0;
Count := Stream.Size;
SetSize(Count);
if Count <> 0 then Stream.ReadBuffer(FMemory^, Count);
end;
finally TMyMemoryStream(Stream).SetPointer(nil, 0); FreeAndNil(Stream);
end;
应该是
Stream.WriteBuffer(Pointer(Msg.WParam)^, Msg.LParam); 才是写到Stream
T1, T2: TMemoryStream;
begin
T1 := TMemoryStream.Create;
T1.LoadFromFile('C:\新建 文本文档 (3).txt'); T2 := TMemoryStream.Create;
T2.WriteBuffer(T1.Memory^, T1.Size);
T2.SaveToFile('C:\新建 文本文档 (4).txt'); T1.Free;
T2.Free;
end;