var
m: TMemoryStream;
P: PChar;
begin
m:= TMemoryStream.Create;
m.LoadFromFile('c:\a.txt');
GetMem(P,100);
m.Read(P,20);
FreeMem(P);
m.Destroy;
m: TMemoryStream;
P: PChar;
begin
m:= TMemoryStream.Create;
m.LoadFromFile('c:\a.txt');
GetMem(P,100);
m.Read(P,20);
FreeMem(P);
m.Destroy;
procedure TForm1.Button1Click(Sender: TObject);
var
vMemoryStream: TMemoryStream;
vBuffer: array[0..255] of Char;
begin
vMemoryStream := TMemoryStream.Create;
try
vMemoryStream.LoadFromFile('c:\temp\temp.txt');
vMemoryStream.Read(vBuffer, 255);
ShowMessage(vBuffer);
finally
vMemoryStream.Free;
end;
end;
{$ELSE}
procedure TForm1.Button1Click(Sender: TObject);
var
vMemoryStream: TMemoryStream;
vBuffer: PChar;//;: array[0..255] of Char;
begin
vMemoryStream := TMemoryStream.Create;
GetMem(vBuffer, 256);
try
vMemoryStream.LoadFromFile('c:\temp\temp.txt');
vMemoryStream.Read(vBuffer^, 255); //vBuffer是一个指针~~应该操作它所指向的内存资源~~
// vMemoryStream.Read(vBuffer[0], 255);
ShowMessage(vBuffer);
finally
vMemoryStream.Free;
FreeMem(vBuffer);
end;
end;
{$ENDIF}
m: TMemoryStream;
P: PChar;
begin
m:= TMemoryStream.Create;
m.LoadFromFile('c:\a.txt');
GetMem(P,100);
m.Read(P^,20); //change
FreeMem(P);
m.Destroy;
end;
==> m.Read(P^, 20);另外应该尽可量地避免内存漏失,
m := TMemoryStream.Create;
try
...
finally
m.Free;
end;对于P也要,
GetMem(P, 100);
try
...
finally
FreeMem(P);
end;使用Free比Destroy安全一点点,不过你确知Object不为nil的话,直接调用
Destroy要快一点点(至少从VCL的源码上看是这样)。
这里有问必答
http://systemer.51.net/cgi-bin/leoboard.cgi
希望你能在这里找到你满意的答案!
m: TMemoryStream;
P: PChar;
begin
m:= TMemoryStream.Create;
m.LoadFromFile('c:\a.txt');
GetMem(P,100);
m.Read(P^,20); //change
FreeMem(P);
m.Destroy;
end;// function Read(var Buffer; Count: Longint): Longint; override;
// property Buffer: PChar;
所以 m.Read(P,20); 应该对的呀,但使用中的确要改为 P^ 才可以,到底为何?
还是 帮助中有点疏误 ? 请指教