求教:关于对象和windows文件系统(100分)

  • 主题发起人 主题发起人 summerlee
  • 开始时间 开始时间
S

summerlee

Unregistered / Unconfirmed
GUEST, unregistred user!
请看如下代码:

如何判断一个动态的定义对象是否存在呢

{$R *.DFM}
var s:TstringList;

procedure TForm1.Button1Click(Sender: TObject);
begin
s:=TStringList.Create;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
s.nil;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if assigned(s) then
Label1.Caption:='对象存在'
else Label1.Caption:='对象不存在';
end;

end.



初看上述代码无任何问题,可以执行的,但是:请连续点击按钮2之后(这个问题后来我明白了,不能连续对一个对象free两次的,应该先判断一下,我太懒了,没有输入这个语句段)
,就会出错;新的问题又出现了;
assigned是不是确实有用,对于判断一个未知的动态对象?或者有其他方式;另外,又有一个新问题,
当用s.free撤销后,为什么判断语句仍然人为它还存在,是不是没有消沉干净或者用nil之类的方法来作。


在delphi中的例子为:
var P: Pointer;

begin
P := nil;
if Assigned (P) then Writeln ('You won''t see this');
GetMem(P, 1024); {P valid}
FreeMem(P, 1024); {P no longer valid and still not nil}
if Assigned (P) then Writeln ('You''ll see this');
end;

好像指针的撤销可以用nil来,我修改了它如下
var P: Pointer;
begin
P := nil;
if not(Assigned (P)) then showmessage ('You won''t see this');
GetMem(P, 1024); {P valid}
FreeMem(P, 1024); {P no longer valid and still not nil}
if Assigned (P) then showmessage('You''ll see this');
end;
为什么freemem后仍然可以assigned到它呢,当令p:=nil后,对象是不存在的,但用nil
方法在上一个tstringlist中不可用。???????

另外,不知大家是否对linux中的mount有印象否?对mount了cdrom后,即使是手动的按光驱弹出按钮也是毫无作用的,很cool吧,我不要要求那么高,目前的想法是:能否动态的下载掉一个windows文件系统,或者别的什么办法,让用户无法访问光驱上的内容?
 
其实linux这个mount对于可卸摘设备来说还有点不灵活,把设备锁住了,其实很烦的
windows现在的文件系统也是mount上去的,不过这个工作在系统初始化的时候就已经完成的
 
Assigned can't detect a dangling pointer--that is,
one that isn't nil but no longer points to valid data. For example,
in the code example for Assigned, Assigned won't detect the fact
that P isn't valid.
 
先free 后nil
 
根据对象名称查找一个对象:
function FindComponent(const AName: string): TComponent;

procedure TForm1.Button1Click(Sender: TObject);
var TC: TComponent;
begin
TC := FindComponent('Edit1');
if TC<>nil then
FreeAndNil(TC)
else
ShowMessage('Not found!');
end;
 
接受答案了.
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部