FS: TFileStream;
res := strtoint(edt.text);   //这句该怎么写?res该定义为什么类型?读取的时候是按照dword读取的FS.Write(Res,4);

解决方案 »

  1.   

    另外一个问题:
    func1()
    var
      fs:TFileStream;
    begin
     ....
       fs.free
    end;func2() 
    var   
       fs:TFileStream; 
    begin  
       ....    
       fs.free 
    end;//func1,func2中的filestream加载的是同一个文件
    procedure ss();
    begin
      func1;
      func2;               //filestream在这里报错,cannot open file,我不是已经释放了吗?
    end;
      

  2.   

    res := strtoint(edt.text); //这句该怎么写?res该定义为什么类型?读取的时候是按照dword读取的FS.Write(Res,4);Res : integer; //或者定义成DWORD(LongWord)都可以无法打开文件,你要检查一下func1的 fs.free是否真的被执行了,下个断点,然后跑起来看看
      

  3.   

    1.DWORD是32位无符号整型(没有负数),对应D中的类型是LongInt和Cardinal;Integer是32位有符号整形,也可以用它
    2.FreeAndNil(fs);
      

  4.   

    我跟踪了看了看。free的确是执行了。我现在前面的函数如果是以只读方式打开的,后面就不会报错。如果是读写方式打开的。即使free了,依然报cannot open file
      

  5.   

    freeandnil是正确的。
    那free不是没什么作用
      

  6.   

    看下就知道区别在哪了!
    procedure TObject.Free;
    begin
    if Self <> nil then
    Destroy;
    end;
    procedure FreeAndNil(var Obj);
    var
    Temp: TObject;
    begin
    Temp := TObject(Obj);
    Pointer(Obj) := nil;
    Temp.Free;
    end;