end else begin Verified := True; StrPCopy(PassWord,Edit1.text); Edit1.text := ''''; Label1.caption := ''Please Verify PassWord:''; end; Key := #0; end; end;
口令检查窗口的实现相对简单,只定义了一个输出函数GetPassWord,用于生成口令检查窗口并返回口令检查的结果。
function GetPassword(Password: PChar): Boolean; var GetPasswordForm: TGetPasswordForm; begin Result := False; GetPasswordForm := TGetPasswordForm.Create(Application); try with GetPasswordForm do if ShowModal = mrOK then if UpperCase(Edit1.Text) <> StrPas(StrUpper(Password)) then MessageDlg(''Invalid Password'', mtWarning, [mbOK], 0) else Result := True; finally PasswordForm.Free; end; end;
PassWord为输入的参数,不能为空,由调用以上函数的程序负责维护。
窗口中用户输入口令时回显在屏幕上的字符由编辑框的PassWordChar属性确定。
在DLLs的工程文件中,把两个输出函数写到exports子句中。
library PassForm; uses GetPass in ''GETPASS.PAS'' {PasswordForm}, Setpass in ''SETPASS.PAS'' {SetPassWordForm}; exports GetPassword,SetPassWord; begin end.
4.2.2 Delphi应用程序调用重用窗体
在Delphi应用程序中调用重用窗体,首先必须包含passform.dll的两个输出函数:
function GetPassword(Password: PChar): Boolean; far; external ''c:\dlls\PassForm''; function SetPassword(PassWord: PChar): Boolean; far; external ''c:\dlls\PassForm'';
这位于程序单元的implementation部分。
而后在过程中调用相应函数实现口令的设置和检查。
口令设置部分的实现代码为:
procedure TForm1.SetButtonClick(Sender: TObject); begin PassWord := StrAlloc(40); if SetPassWord(PassWord) = False then MessageDlg(''PassWord is not set'',mtInformation,[mbOK],0); end;
首先为口令字符串分配内存。当口令设置窗体按Cancel按钮取消时,显示相应的信息。
口令检查部分的实现代码为:
procedure TForm1.TestButtonClick(Sender: TObject); begin if PassWord = nil then begin MessageDlg(''Set password first'', mtInformation, [mbOK], 0); SetButton.SetFocus; Exit; end; if GetPassword(PassWord) then Label1.Caption := ''You are Wellcome !'' else Label1.Caption := ''Sorry,You are InValid User.''; end;
根据口令检查的结果,在标签框中显示相应的信息。
4.2.3 VB应用程序调用重用窗体
VB是微软公司极力推荐的一个可视化开发工具。它虽然并不支持动态链接库的创建,但可以调用标准的Windows API动态链接库和用其它语言编写的动态链接库。为了验证所生成DLLs的普适性,我们用VB开发了一个简单的程序来调用passform.dll中储存的窗体。
下面是VB程序的完整代码,和Delph |