从你的代码看分配空间是对的,而是你读取的问题。
改成:
iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength);

解决方案 »

  1.   

    读取没问题,Buffer本来就是一个指针,而FileRead要的参数也是一个指针。估计是FileSeek的问题,FileSeek你要检查返回值的,如果返回值为-1,表示执行失败,这时候你用
      
      Buffer := PChar(AllocMem(iFileLength + 1)); 如果FileSeek失败,则iFileLength 为-1,当然你的Buffer只能得到0空间。
    检查文件是否存在
      

  2.   

    Buffer := AllocMem(iFileLength + 1);或者
    GetMem(Buffer,iFileLength + 1);
      

  3.   

    来晚了
    kmzym() 是对的而且下面这句不用PChar转换也可以
    Buffer := PChar(AllocMem(iFileLength + 1));
      

  4.   

    我测试过,kmzym()是对的,
    下面这句也必须要
    Buffer  :=  PChar(AllocMem(iFileLength  +  1));