freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第十章動(dòng)態(tài)鏈接庫編程一-在線瀏覽

2024-11-08 15:29本頁面
  

【正文】 brary 后跟的庫名自動(dòng)修改; 、函數(shù)代碼??梢岳脴?biāo)準(zhǔn)指示 name 、 Index、 resident 以方便和加速過程 /函數(shù)的調(diào)用; 。 動(dòng)態(tài)鏈接庫中的標(biāo)準(zhǔn)指示 在動(dòng)態(tài)鏈接庫的輸出部分,用到了三個(gè)標(biāo)準(zhǔn)指示: name、 Index、 resident。如: exports InStr name MyInstr。如果仍利用原來的名字 (InStr),則在程序執(zhí)行到引用點(diǎn)時(shí)會引發(fā)一個(gè)系統(tǒng)錯(cuò)誤。如果不使用 Index 指示,則由編譯器按順序進(jìn)行分配。使用 Index 可以加速調(diào)用過程。這樣當(dāng)其它應(yīng)用程序調(diào)用該過程時(shí),可以比利用名字掃描 DLL 入口降低時(shí)間開銷。例如: exports InStr name MyInStr resident。調(diào)用它的模塊不能直接使用它定義的變量。而對 DLLs 來說,它永遠(yuǎn)都沒有機(jī)會使用調(diào)用它的模塊中聲明的變量。因此在 DLL 中的過程、函數(shù)絕對不要假定 DS = SS。 Delphi 絕不會產(chǎn)生假定 DS = SS 的代碼, Delphi 的任何運(yùn)行時(shí)間庫過程 /函數(shù)也都不作這種假定。 DLLs 中的運(yùn)行時(shí)間錯(cuò)和處理 由于 DLLs無法控制應(yīng)用程序的運(yùn)行,導(dǎo)致很難進(jìn)行異常處理,因此編寫 DLLs時(shí)要十分小心,以確保被調(diào)用時(shí)能正常執(zhí)行 。這樣造成的問題是當(dāng) DLLs 已被修改,重新進(jìn)行調(diào)用時(shí),內(nèi)存中保留的仍然可能是以前的版本,修改后的程序并沒有得到驗(yàn)證。 同一般的應(yīng)用程序相比, DLL 中運(yùn)行時(shí)間錯(cuò)的處理是很困難的,而造成的后果也更為嚴(yán)重。 庫初始化代碼的編寫 傳統(tǒng) Windows 中動(dòng)態(tài)鏈接庫的編寫,需要兩 個(gè)標(biāo)準(zhǔn)函數(shù): LibMain 和 WEP,用于啟動(dòng)和關(guān)閉 DLL。 Delphi 用自己特有的方式實(shí)現(xiàn)了這兩個(gè)標(biāo)準(zhǔn)函數(shù)的功能。和傳統(tǒng)Windows 編程方法相比,它的主要特色是: 。所以大部分情況下用戶不會涉及到; 以設(shè)置多個(gè)退出過程,退出時(shí)按順序依次被調(diào)用; 和 WEP 對用戶透明,由系統(tǒng)自動(dòng)調(diào)用。在 ()節(jié)“利用 DLLs 實(shí)現(xiàn)應(yīng)用程序間的數(shù)據(jù)傳輸”中,用于數(shù)據(jù)共享的全局內(nèi)存塊就是在初始化代碼中分配的。 Delphi 有一個(gè)預(yù)定義變量 ExitProc 用于指向退出過程的地址。系統(tǒng)自動(dòng)調(diào)用WEP 函數(shù),把 ExitProc 指 向的地址依次賦給 WEP 執(zhí)行,直到 ExitProc 為 nil。 library Test。 var SaveExit: Pointer。 far。 ExitProc := SaveExit。 begin {DLL 的初始化工作 } SaveExit := ExitProc。 { 安裝新的退出過程 } end. 在初始化代碼中,首先把原來的退出過程指針保存到一個(gè)變量中,而后再把新的退出過程地址賦給 ExitProc。由于 ExitProc 是一個(gè)系統(tǒng)全局 變量,所以在結(jié)束時(shí)恢復(fù)原來的退出過程是必要的。 ExitCode 的取值與意義如下: 表 ExitCode 的取值與意義 ━━━━━━━━━━━━━━━━━━━━━ 取 值 意 義 ————————————————————— WEP_System_Exit Windows 關(guān)閉 WEP_Free_DLLx DLLs 被卸出 ━━━━━━━━━━━━━━━━━━━━━ 退出過程編譯時(shí)必須關(guān)閉 stack_checking,因而需設(shè)置編譯指示 {$S} 。應(yīng)該注意的一點(diǎn)是:為了保證這個(gè)函數(shù)可以被其它語言編寫的程序所調(diào)用,作為參數(shù)傳遞的字符串應(yīng)該是無結(jié)束符的字符數(shù)組類型 (即 PChar類型 ),而不是 Object Pascal 的帶結(jié)束符的 Srting 類型。 uses SysUtils, Classes。Ch: Char): Integer。 var Len,i: Integer。 for i := 0 to Len1 do if SourceStr[i] = ch then begin Result := i。 end。 end。MyInStr39。 begin end. 調(diào)用 DLLs 有兩種方法可用于調(diào)用一個(gè)儲存在 DLLs 中的過程。例如: function Instr(SourceStr : PChar。 Integer。 external 39。 使用這種方法,程序無法在運(yùn)行時(shí)間里決定 DLLs 的調(diào)用。 使 用 Windows API 函數(shù) LoadLibray和 GetProcAddress 可以實(shí)現(xiàn)在運(yùn)行時(shí)間里動(dòng)態(tài)裝載 DLLs 并調(diào)用其中的過程。 使用動(dòng)態(tài)調(diào)用,即使裝載一個(gè) DLLs 失敗了,程序仍能繼續(xù)運(yùn)行。被調(diào)用的過程或函數(shù)必須采用遠(yuǎn) 調(diào)用模式。 Delphi 全部支持傳統(tǒng) Windows 動(dòng)態(tài)鏈接庫編程中的三種調(diào)用方式,它們是: ● 通過過程 /函數(shù)名 ● 通過過程 /函數(shù)的別名 ● 通過過程 /函數(shù)的順序號 通過過程或函數(shù)的別名調(diào)用,給用戶編程提供了靈活性,而通過順序號(Index)調(diào)用可以提高相應(yīng) DLL的裝載速度。
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1