首頁(yè) 考試吧論壇 Exam8視線 考試商城 網(wǎng)絡(luò)課程 模擬考試 考友錄 實(shí)用文檔 求職招聘 論文下載
2011中考 | 2011高考 | 2012考研 | 考研培訓(xùn) | 在職研 | 自學(xué)考試 | 成人高考 | 法律碩士 | MBA考試
MPA考試 | 中科院
四六級(jí) | 職稱(chēng)英語(yǔ) | 商務(wù)英語(yǔ) | 公共英語(yǔ) | 托福 | 雅思 | 專(zhuān)四專(zhuān)八 | 口譯筆譯 | 博思 | GRE GMAT
新概念英語(yǔ) | 成人英語(yǔ)三級(jí) | 申碩英語(yǔ) | 攻碩英語(yǔ) | 職稱(chēng)日語(yǔ) | 日語(yǔ)學(xué)習(xí) | 法語(yǔ) | 德語(yǔ) | 韓語(yǔ)
計(jì)算機(jī)等級(jí)考試 | 軟件水平考試 | 職稱(chēng)計(jì)算機(jī) | 微軟認(rèn)證 | 思科認(rèn)證 | Oracle認(rèn)證 | Linux認(rèn)證
華為認(rèn)證 | Java認(rèn)證
公務(wù)員 | 報(bào)關(guān)員 | 銀行從業(yè)資格 | 證券從業(yè)資格 | 期貨從業(yè)資格 | 司法考試 | 法律顧問(wèn) | 導(dǎo)游資格
報(bào)檢員 | 教師資格 | 社會(huì)工作者 | 外銷(xiāo)員 | 國(guó)際商務(wù)師 | 跟單員 | 單證員 | 物流師 | 價(jià)格鑒證師
人力資源 | 管理咨詢師考試 | 秘書(shū)資格 | 心理咨詢師考試 | 出版專(zhuān)業(yè)資格 | 廣告師職業(yè)水平
駕駛員 | 網(wǎng)絡(luò)編輯
衛(wèi)生資格 | 執(zhí)業(yè)醫(yī)師 | 執(zhí)業(yè)藥師 | 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格考試會(huì)計(jì)證) | 經(jīng)濟(jì)師 | 會(huì)計(jì)職稱(chēng) | 注冊(cè)會(huì)計(jì)師 | 審計(jì)師 | 注冊(cè)稅務(wù)師
注冊(cè)資產(chǎn)評(píng)估師 | 高級(jí)會(huì)計(jì)師 | ACCA | 統(tǒng)計(jì)師 | 精算師 | 理財(cái)規(guī)劃師 | 國(guó)際內(nèi)審師
一級(jí)建造師 | 二級(jí)建造師 | 造價(jià)工程師 | 造價(jià)員 | 咨詢工程師 | 監(jiān)理工程師 | 安全工程師
質(zhì)量工程師 | 物業(yè)管理師 | 招標(biāo)師 | 結(jié)構(gòu)工程師 | 建筑師 | 房地產(chǎn)估價(jià)師 | 土地估價(jià)師 | 巖土師
設(shè)備監(jiān)理師 | 房地產(chǎn)經(jīng)紀(jì)人 | 投資項(xiàng)目管理師 | 土地登記代理人 | 環(huán)境影響評(píng)價(jià)師 | 環(huán)保工程師
城市規(guī)劃師 | 公路監(jiān)理師 | 公路造價(jià)師 | 安全評(píng)價(jià)師 | 電氣工程師 | 注冊(cè)測(cè)繪師 | 注冊(cè)計(jì)量師
繽紛校園 | 實(shí)用文檔 | 英語(yǔ)學(xué)習(xí) | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲

2011計(jì)算機(jī)等級(jí)考試Delphi講義:動(dòng)態(tài)鏈接庫(kù)編程

本章主要介紹Windows的動(dòng)態(tài)鏈接庫(kù)原理、DLLs的編寫(xiě)和調(diào)用、利用DLLs實(shí)現(xiàn)數(shù)據(jù)傳輸、利用DLLs實(shí)現(xiàn)窗體重用。

  口令成功設(shè)置,把PassWord的值拷貝給PWord輸出,并返回True。應(yīng)該注意的是由于 PWord本身就是指針類(lèi)型,指向一個(gè)字符串的地址,因而雖然PWord用于輸出,但在參數(shù)表中仍為傳值參數(shù),而不是傳址參數(shù)。另外調(diào)用函數(shù)StrCopy,要求PWord在傳入前已分配內(nèi)存,否則會(huì)導(dǎo)致一個(gè)一般保護(hù)錯(cuò)。try...finally用于保護(hù)窗口所占用內(nèi)存資源在任何情況下都能正常釋放,讀者可參看第十二章。

  在口令設(shè)置窗口中,為了確保用戶記住了設(shè)置的口令,在用戶輸入并按回車(chē)鍵后,要求用戶再次輸入進(jìn)行確認(rèn)。只有用戶重新輸入的字符串與原設(shè)置口令相同,口令設(shè)置窗口才能正常關(guān)閉 。否則將原設(shè)置口令清空,要求用戶再次輸入。以上功能的實(shí)現(xiàn)在編輯框的OnKeyPress事件處理過(guò)程中。

  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;

  口令檢查窗口的實(shí)現(xiàn)相對(duì)簡(jiǎn)單,只定義了一個(gè)輸出函數(shù)GetPassWord,用于生成口令檢查窗口并返回口令檢查的結(jié)果。

  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為輸入的參數(shù),不能為空,由調(diào)用以上函數(shù)的程序負(fù)責(zé)維護(hù)。

  窗口中用戶輸入口令時(shí)回顯在屏幕上的字符由編輯框的PassWordChar屬性確定。

  在DLLs的工程文件中,把兩個(gè)輸出函數(shù)寫(xiě)到exports子句中。

  library PassForm;

  uses

  GetPass in 'GETPASS.PAS' {PasswordForm},

  Setpass in 'SETPASS.PAS' {SetPassWordForm};

  exports

  GetPassword,SetPassWord;

  begin

  end.

  10.4.2.2 Delphi應(yīng)用程序調(diào)用重用窗體

  在Delphi應(yīng)用程序中調(diào)用重用窗體,首先必須包含passform.dll的兩個(gè)輸出函數(shù):

  function GetPassword(Password: PChar): Boolean;

  far; external 'c:\dlls\PassForm';

  function SetPassword(PassWord: PChar): Boolean;

  far; external 'c:\dlls\PassForm';

  這位于程序單元的implementation部分。

  口令設(shè)置部分的實(shí)現(xiàn)代碼為:

  procedure TForm1.SetButtonClick(Sender: TObject);

  begin

  PassWord := StrAlloc(40);

  if SetPassWord(PassWord) = False then

  MessageDlg('PassWord is not set',mtInformation,[mbOK],0);

  end;

  首先為口令字符串分配內(nèi)存。當(dāng)口令設(shè)置窗體按Cancel按鈕取消時(shí),顯示相應(yīng)的信息。

  口令檢查部分的實(shí)現(xiàn)代碼為:

  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;

  根據(jù)口令檢查的結(jié)果,在標(biāo)簽框中顯示相應(yīng)的信息。

  10.4.2.3 VB應(yīng)用程序調(diào)用重用窗體

  VB是微軟公司極力推薦的一個(gè)可視化開(kāi)發(fā)工具。它雖然并不支持動(dòng)態(tài)鏈接庫(kù)的創(chuàng)建,但可以調(diào)用標(biāo)準(zhǔn)的Windows API動(dòng)態(tài)鏈接庫(kù)和用其它語(yǔ)言編寫(xiě)的動(dòng)態(tài)鏈接庫(kù)。為了驗(yàn)證所生成DLLs的普適性,我們用VB開(kāi)發(fā)了一個(gè)簡(jiǎn)單的程序來(lái)調(diào)用passform.dll中儲(chǔ)存的窗體。

  下面是VB程序的完整代碼,和Delphi程序的對(duì)應(yīng)部分基本一致。

  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

  有關(guān)VB編程的一些具體問(wèn)題,讀者可參看有關(guān)的VB參考書(shū)。

  10.4.3 小結(jié)

  本章我們討論的是動(dòng)態(tài)鏈接庫(kù)編程。許多可視化開(kāi)發(fā)工具(如Visual Basic)不支持 DLLs的創(chuàng)建,而Delphi在這里又有上乘的表現(xiàn)。特別是窗體重用機(jī)制是Delphi對(duì)Windows下DLLs編程的一個(gè)重大改進(jìn)。在一般的DLLs編程中也體現(xiàn)了Delphi快捷、方便的特點(diǎn)。動(dòng)態(tài)鏈接庫(kù)是 Windows下程序組織的一種重要方式,使用動(dòng)態(tài)鏈接庫(kù)可以極大地保護(hù)用戶在不同開(kāi)發(fā)工具、不同時(shí)期所做的工作。利用動(dòng)態(tài)鏈接庫(kù),用戶可以逐步去構(gòu)筑自己的程序模塊庫(kù),為今后的工作積累素材。

  相關(guān)推薦:2010年9月計(jì)算機(jī)等級(jí)考試試題及答案解析專(zhuān)題
       預(yù)告:名師解析2010年9月計(jì)算機(jī)等級(jí)考試試題答案
       2010年9月計(jì)算機(jī)等級(jí)考試成績(jī)查詢時(shí)間及入口
       2010年9月計(jì)算機(jī)等考成績(jī)查詢短信免費(fèi)提醒開(kāi)通
文章搜索
版權(quán)聲明:如果計(jì)算機(jī)等級(jí)考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本計(jì)算機(jī)等級(jí)考試網(wǎng)內(nèi)容,請(qǐng)注明出處。