这样是可以的。
procedure TForm1.Button3Click(Sender: TObject);
var
  F: File;
  lSz, lAllocSz: integer;
  MyBuffA: array [0..800] of char;
begin
  AssignFile(F, ExtractFilePath(Application.ExeName) + '\test.dcm');
  Reset(F, 1);
  BlockRead(F, MyBuffA, 800);
  CloseFile(F);
end;这样就不行。。
procedure TForm1.BtnAreaClick(Sender: TObject);
var
  F: File;
  lSz, lAllocSz: integer;
  MyBuffA: array of char;
begin
  SetLength(MyBuffA, 800);
  AssignFile(F, ExtractFilePath(Application.ExeName) + '\test.dcm');
  Reset(F, 1);
  BlockRead(F, MyBuffA, 800);
  CloseFile(F);
end;可是这个字符数组的长度是不固定的呀,
可是用完了SetLenth以后,程序也能执行,
但是报地址错,为什么呢?指点一二。。

解决方案 »

  1.   

    BlockRead(F, MyBuffA, 800);
    ->
    BlockRead(F, @MyBuffA[0], 800);
      

  2.   

    BlockRead(F, MyBuffA[0], 800);//不能BlockRead(F, MyBuffA, 800);
      

  3.   

    SetLength(MyBuffA, 800);实际上MyBuffA是array[0..799] of char
      

  4.   

    BlockRead(F, @MyBuffA[0], 800);//不能BlockRead(F, MyBuffA, 800);
      

  5.   

    BlockRead(F, @MyBuffA[0], 800);
    编译不能通过。BlockRead(F, MyBuffA[0], 800);
    和原来的一样。
    还是出错。。
      

  6.   

    SORRY, 应该这样:
    BlockRead(F, (@MyBuffA[0])^, 800);
      

  7.   

    sysu(死树) 兄:
    还是报地址错呀,,,你能帮我调试一下吗??谢谢了。。
      

  8.   

    我新开一个工程,只写入上述代码确实可以可能我的工程中别的地方还有问题,调试通过后马上结贴,给分。还有麻烦一下sysu:
    能稍微讲解一下
    BlockRead(F, (@MyBuffA[0])^, 800);

    BlockRead(F, MyBuffA, 800);
    的区别吗?MyBuffA不也是字符指针吗?
      

  9.   

    BlockRead(F, MyBuffA, 800); 是把 MyBuffA 本身的地址传进去了,而不是 MyBuffA 指向的地址。