首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试
MPA考试 | 中科院
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT
新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证
华为认证 | Java认证
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格
报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师
人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平
驾驶员 | 网络编辑
卫生资格 | 执业医师 | 执业药师 | 执业护士
会计从业资格考试会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师
注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师
质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师
设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师
城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏
您现在的位置: 考试吧(Exam8.com) > 计算机等级考试 > 计算机二级 > Delphi > 复习资料 > 正文

2011计算机等级考试Delphi讲义:动态链接库编程

来源:考试吧Exam8.com) 2010-10-27 15:08:06 考试吧:中国教育培训第一门户 模拟考场
本章主要介绍Windows的动态链接库原理、DLLs的编写和调用、利用DLLs实现数据传输、利用DLLs实现窗体重用。

  口令成功设置,把PassWord的值拷贝给PWord输出,并返回True。应该注意的是由于 PWord本身就是指针类型,指向一个字符串的地址,因而虽然PWord用于输出,但在参数表中仍为传值参数,而不是传址参数。另外调用函数StrCopy,要求PWord在传入前已分配内存,否则会导致一个一般保护错。try...finally用于保护窗口所占用内存资源在任何情况下都能正常释放,读者可参看第十二章。

  在口令设置窗口中,为了确保用户记住了设置的口令,在用户输入并按回车键后,要求用户再次输入进行确认。只有用户重新输入的字符串与原设置口令相同,口令设置窗口才能正常关闭 。否则将原设置口令清空,要求用户再次输入。以上功能的实现在编辑框的OnKeyPress事件处理过程中。

  procedure TSetPassWordForm.Edit1KeyPress(Sender: TObject; var Key: Char);

  begin

  if Edit1.text = '' then Exit;

  if Key = #13 then

  begin

  if Verified then

  if StrPas(PassWord) = Edit1.text then

  begin

  OKBtn.Enabled := True;

  Edit1.Enabled := False;

  OKBtn.SetFocus;

  end

  else

  begin

  Verified := False;

  MessageDlg('PassWord is InValid.',mtWarning,[mbOK],0);

  Edit1.text := '';

  PassWord := '';

  Label1.Caption := 'Please Input PassWord:';

  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.

  10.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;

  根据口令检查的结果,在标签框中显示相应的信息。

  10.4.2.3 VB应用程序调用重用窗体

  VB是微软公司极力推荐的一个可视化开发工具。它虽然并不支持动态链接库的创建,但可以调用标准的Windows API动态链接库和用其它语言编写的动态链接库。为了验证所生成DLLs的普适性,我们用VB开发了一个简单的程序来调用passform.dll中储存的窗体。

  下面是VB程序的完整代码,和Delphi程序的对应部分基本一致。

  Option Explicit

  Declare Function GetPassWord Lib "c:\dlls\passform.dll" (ByVal PassWord As String) As Integer

  Declare Function SetPassWord Lib "c:\dlls\passform.dll" (ByVal PassWord As String) As Integer

  Dim PassWord As String * 40

  Sub Check_Click ()

  If PassWord = "" Then

  MsgBox ("Enter sample password first")

  SetPass.SetFocus

  Else

  If GetPassWord(PassWord) Then

  StatusLbl.Caption = "You are Welcome!"

  Else

  StatusLbl.Caption = "Sorry,You are Invalid User."

  End If

  End If

  End Sub

  Sub SetPass_Click ()

  If SetPassWord(PassWord) = 0 Then

  MsgBox ("PassWord is not Set.")

  End If

  End Sub

  有关VB编程的一些具体问题,读者可参看有关的VB参考书。

  10.4.3 小结

  本章我们讨论的是动态链接库编程。许多可视化开发工具(如Visual Basic)不支持 DLLs的创建,而Delphi在这里又有上乘的表现。特别是窗体重用机制是Delphi对Windows下DLLs编程的一个重大改进。在一般的DLLs编程中也体现了Delphi快捷、方便的特点。动态链接库是 Windows下程序组织的一种重要方式,使用动态链接库可以极大地保护用户在不同开发工具、不同时期所做的工作。利用动态链接库,用户可以逐步去构筑自己的程序模块库,为今后的工作积累素材。

上一页  1 2 3 4 5  下一页
  相关推荐:2010年9月计算机等级考试试题及答案解析专题
       预告:名师解析2010年9月计算机等级考试试题答案
       2010年9月计算机等级考试成绩查询时间及入口
       2010年9月计算机等考成绩查询短信免费提醒开通
文章搜索
版权声明:如果计算机等级考试网所转载内容不慎侵犯了您的权益,请与我们联系800@exam8.com,我们将会及时处理。如转载本计算机等级考试网内容,请注明出处。