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;

解决方案 »

  1.   

    //{$DEFINE NO1}{$IFDEF NO1}
    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}
      

  2.   

    var
      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;
      

  3.   

    m.Read(P, 20);
    ==> 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的源码上看是这样)。
      

  4.   

    这里找不到你满意的答案吗?来这里试试!
    这里有问必答
    http://systemer.51.net/cgi-bin/leoboard.cgi
    希望你能在这里找到你满意的答案!
      

  5.   

    var
      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^ 才可以,到底为何?
    还是 帮助中有点疏误 ?  请指教