哪个比较好?(20分)

嫩手

Unregistered / Unconfirmed
GUEST, unregistred user!
我想问一下,下面的写法哪个比较好?
procedure do
ntReboot(XP_Reboot:Boolean);stdcall;
var
reg :tregistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('System/CurrentControlSet/Control/CrashControl',true);
if XP_Reboot then
Reg.WriteInteger('AutoReboot',0)
else
Reg.WriteInteger('AutoReboot',1)
finally
Reg.CloseKey;
Reg.Free;
end;
end;

function do
ntReboot(XP_Reboot:Boolean): boolean;stdcall;
var reg:TRegistry;
begin
result:=true;
reg:=TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
TRY
Reg.OpenKey('System/CurrentControlSet/Control/CrashControl',true);
if xp_reBoot then
//自动启动
Reg.WriteInteger('AutoReboot',0)
else
Reg.WriteInteger('AutoReboot',1)
except
result:=false;
end;
reg.CloseKey;
reg.Free;
end;
 
第一个好一些吧
 
上边那个,能保证资源的释放,下边的那个就不一定了
 
第一个也不是很完美,如果Reg := TRegistry.Create设一句有问题,你就对这一过程
的结果无法控制了,不过这种现象不大会发生。
 
第一种是一个标准写法,第一种好些
 
结合在一起吧,,
即要保证不会有异常抛出,也要保证最终的资源释放:
procedure do
ntReboot(XP_Reboot:Boolean);stdcall;
var
reg :tregistry;
begin
Reg := TRegistry.Create;
try
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('System/CurrentControlSet/Control/CrashControl',true);
if XP_Reboot then
Reg.WriteInteger('AutoReboot',0)
else
Reg.WriteInteger('AutoReboot',1)
except
result:=false;

end;
finally
Reg.CloseKey;
Reg.Free;
end;
end;
 
这个是用procedure 好还是用function好?
 
:)
犯了一个低级错误,,
就你的用途来说,返回一个值还是比较好的。
 
犯了个什么错误?可以指出吗?就你的意思还是用function比较好对吗?
 
我说的犯错误的是我哈。。没有说你呢。。 因为我把 procedure 里搞了个 Result := ?
确实,我觉得如果你的应用还要检测退出状态的话当然用 function 比较好,
但不知这样有没有负面的影响?
 
我打算写到DLL里,所以不知道哪个好,请大家费费心,谈谈哪个好些?
 
帮帮忙了,我想结束这个问题了,帮我看看哪个好?如果不好怎么写才好?
 
同意darnis
 
是用function好还是用procedure 好?里面是不是用两个try?
 
要返回值的话用function.
用两个可以更安全地保护你的程序运行。
20分大家分。。。唉!
 
是用function好还是用procedure 好?看你需不需要结果,或者结果对你有没有用。
里面是不是用两个try? 保证程序正常运行可以考虑 try 嵌套。
 
结束吧!
 
顶部