首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

一个文件读写的有关问题

2012-02-10 
一个文件读写的问题我自己编写了一个类:TMicroscopeCtrl,测试这个类的时候,我在form的这个地方定义了一个

一个文件读写的问题
我自己编写了一个类:TMicroscopeCtrl,测试这个类的时候,我在form的这个地方定义了一个实例
private
        {   Private   declarations   }
        mc   :   TMicroscopeCtrl;
在form的create和Destroy事件中的代码如下:

procedure   TfrmMain.FormCreate(Sender:   TObject);
var
    fp   :   integer;
begin
    if   FileExists( 'ControlMic.dat ')   then
    begin
        fp   :=   FileOpen( 'ControlMic.dat ',fmOpenRead);
        if   fp   > =   0   then
        begin
            FileRead(fp,mc,sizeof(TMicroscopeCtrl));
            FileClose(fp);
        end;
    end
    else
    begin
        mc   :=   TMicroscopeCtrl.Create(Self);
    end;
end;
procedure   TfrmMain.FormDestroy(Sender:   TObject);
var
    fp   :   integer;
begin          
    fp   :=   FileCreate( 'ControlMic.dat ');
    if   fp   > =   0   then
    begin
        FileWrite(fp,mc,SizeOf(TMicroscopeCtrl));
        FileClose(fp);
    end;  
end;
这样做的目的是因为这个类的属性值我想保存下来。
不知道我这样写有没有什么问题?

现在出现这样的问题:
我的类中有包含一个私有的串口控件(也就是SPCOMM),第一次运行这个程序,肯定没有问题。但是当保存成文件再一次运行的时候,就会出现stack   overflow的错误。我单步调试看过,   mc中的串口控件是nil或者是1,根本不是我保存时候看到那个值,而且mc的其他属性值,也不是我保存之前给mc设置的那些值,真搞不懂,怎么没有存上呢?还是我读写的时候出现了错误?
使用这个方式,我是参照了一个bcb中的写法,我仔细查看了,没什么太大的差别,但是bcb中的就好用。我不想把这些属性值写到什么ini文件啊,或者注册表之类的地方,所以想试试这个办法,怎么也搞不通,郁闷!

[解决办法]
看起来保存的只是指针。只有4个字节。

试试 WriteComponentResFile / ReadComponentResFile
[解决办法]
SizeOf(TMicroscopeCtrl); 这个不对。
这个成了返回类类型变量的尺寸了,而不是类对象的尺寸。

SizOf 对简单类型是可以的,对类是无效的。

另外,保存类属性值不是你想的那么简单。

热点排行