跟踪了一下,感觉是FileRead函数有问题,把Buffer类型换成字符数组或者动态字符数组就没有问题。

解决方案 »

  1.   


    iBytesRead := FileRead(iFileHandle, Buffers, iFileLength);
    改为
    iBytesRead := FileRead(iFileHandle, Buffers^, iFileLength);      
      

  2.   

    你的程序不止一个问题。
    最后改成这样:procedure TForm1.Button1Click(Sender: TObject);
    var
      iFileHandle: Integer;
      iFileLength: Integer;
      iBytesRead: Integer;
      Buffers: PChar;
      i: Integer;
    begin
      if OpenDialog1.Execute then
      begin
        try
          iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
          iFileLength := FileSeek(iFileHandle,0,2);
          FileSeek(iFileHandle,0,0);
          Buffers := StrAlloc(iFileLength + 1);
          iBytesRead := FileRead(iFileHandle, Buffers^, iFileLength);//这里改了
          FileClose(iFileHandle);
          for i := 0 to iBytesRead-1 do
          begin
            StringGrid1.RowCount := StringGrid1.RowCount + 1;
            StringGrid1.Cells[1,i+1] := Buffers[i];
            StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffers[i]));
          end;
        finally
          StrDispose(Buffers);//这里改了
        end;
      end;end;