请教Delphi里面boolean初始化的值
我是JAVA程序员,对delphi完全不懂,最近有个古老的project用delphi写的,出了个问题。我追查源代码,发现有个地方实在看不懂,想求教。由于要求源代码保密,我只能提供部分函数代码,忘理解。
- Delphi(Pascal) code
function ShowLogonDialog(var Privilege: Privilegs; var LastUserName: AnsiString): Boolean;var Expired: Boolean; //这里Expired声明为boolean类型begin SecLogonDialog := LogonDialog.Create(nil); with SecLogonDialog do try Result := (TransparentBackgroundForm.ShowSystemModal(SecLogonDialog) = mrOk); if Result then Privilege := UserPrivilege(Expired) //这里没有赋值就直接使用了Expired else Privilege := eopsNone; if Privilege <> eopsNone then LastUserName := UserName; finally FreeAndNil(SecLogonDialog); end;end;
再来看下Function UserPrivilege
- Delphi(Pascal) code
function LogonDialog.UserPrivilege(var Expired: Boolean): Privilegs;begin Result := IniFileStorage.UserPrivilege(UserNameEdit.Text, PasswordEdit.Text, Expired); if Expired then // 如果Expired为True的话,就提示Account has expired PxLOG.JclLogFmt(PXLC_INF, 'Account has expired.') else if Result = eopsNone then PxLOG.JclLogFmt(PXLC_ERR, 'Invalid logon.');end;
问题是登录时,出现了"Account has Expired.",但是是2012年1月1号才出现的,以前一直都是正常的。我对这里的Expired很不理解,没有赋值直接使用,如果初始值默认为false,那就永远不会出现"Account has expired.",为true也永远会出现"Account has expired."。
如果是象C语言一样,如果没有通过初始化,值不确定(根据当时的栈值),那也不可能会这样。
对delphi实在不是很懂,理解上也是在Java或者C语言的角度来理解,求救。
[解决办法]
定义一个Boolean变量时,默认的初始值是False
你这里Expired是传址方式,在任何地方置了Expired,都是会改变它的值的
要具体的踪下去,看看在那里改变了