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

正文內(nèi)容

第十章 動(dòng)態(tài)鏈接庫編程(一)-文庫吧

2025-08-02 15:29 本頁面


【正文】 的兩節(jié)中討論。 編寫一般 DLLs 的步驟 編寫一般 DLLs 的步驟如下: Delphi 的應(yīng)用程序模板,建立一個(gè) DLLs 程序框架。 對于 Delphi 的用戶,由于沒有 DLLs 模板,因此: (1).建立一個(gè)一般的應(yīng)用程序,并打開工程文件; (2).移去窗體和相應(yīng)的代碼單元; (3).在工程文件中,把 program 改成 library,移去 Uses 子句中的 Forms,并添加適當(dāng)?shù)膸靻卧ㄒ话?SysUtils、 Classes 是需要的),刪去 begin...end之間的所有代碼。 ,此時(shí) library 后跟的庫名自動(dòng)修改; 、函數(shù)代碼。如果過程、函數(shù)準(zhǔn)備供其它應(yīng)用程序調(diào)用,則在過程、函數(shù)頭后加上 export 編譯指示; exports 子句,包含供其它應(yīng)用程序調(diào)用的函數(shù)和過程名??梢岳脴?biāo)準(zhǔn)指示 name 、 Index、 resident 以方便和加速過程 /函數(shù)的調(diào)用; 。這一步是可選的; ,生成動(dòng)態(tài)鏈接庫文件。 動(dòng)態(tài)鏈接庫中的標(biāo)準(zhǔn)指示 在動(dòng)態(tài)鏈接庫的輸出部分,用到了三個(gè)標(biāo)準(zhǔn)指示: name、 Index、 resident。 name 后面接一個(gè)字符串常量,作為該過程或函數(shù)的輸出名。如: exports InStr name MyInstr。 其它應(yīng)用程序?qū)⒂眯旅?(MyInstr)調(diào)用該過程或函數(shù)。如果仍利用原來的名字 (InStr),則在程序執(zhí)行到引用點(diǎn)時(shí)會(huì)引發(fā)一個(gè)系統(tǒng)錯(cuò)誤。 Index 指示為過程或函數(shù)分配一個(gè)順序號。如果不使用 Index 指示,則由編譯器按順序進(jìn)行分配。 Index 后所接數(shù)字的范圍為 1...32767。使用 Index 可以加速調(diào)用過程。 使用 resident,則當(dāng) DLLs 裝入時(shí)特定的輸出信息始終保持在內(nèi)存中。這樣當(dāng)其它應(yīng)用程序調(diào)用該過程時(shí),可以比利用名字掃描 DLL 入口降低時(shí)間開銷。 對于那些其它應(yīng)用程序常常要調(diào)用的過程或函數(shù),使用 resident 指示是合適的。例如: exports InStr name MyInStr resident。 DLLs 中的變量和段 一個(gè) DLLs 擁有自己的數(shù)據(jù)段 (DS),因而它聲明的任何變量都為自己所私有。調(diào)用它的模塊不能直接使用它定義的變量。要使用必須通過過程或函數(shù)界面才能完成。而對 DLLs 來說,它永遠(yuǎn)都沒有機(jī)會(huì)使用調(diào)用它的模塊中聲明的變量。 一個(gè) DLLs 沒有自己的堆棧段 (SS),它使用調(diào)用它的應(yīng)用程序的堆棧。因此在 DLL 中的過程、函數(shù)絕對不要假定 DS = SS。一些語言在小模式編譯下有 這種假設(shè),但使用 Delphi 可以避免這種情況。 Delphi 絕不會(huì)產(chǎn)生假定 DS = SS 的代碼, Delphi 的任何運(yùn)行時(shí)間庫過程 /函數(shù)也都不作這種假定。需注意的是如果讀者想嵌入?yún)R編語言代碼,絕不要使 SS 和 DS登錄同一個(gè)值。 DLLs 中的運(yùn)行時(shí)間錯(cuò)和處理 由于 DLLs無法控制應(yīng)用程序的運(yùn)行,導(dǎo)致很難進(jìn)行異常處理,因此編寫 DLLs時(shí)要十分小心,以確保被調(diào)用時(shí)能正常執(zhí)行 。當(dāng) DLLs 中發(fā)生一個(gè)運(yùn)行時(shí)間錯(cuò)時(shí),相應(yīng) DLLs 并不一定從內(nèi)存中移去(因?yàn)榇藭r(shí)其它應(yīng)用程序可能正在用它),而調(diào)用 DLLs 的程序異常中止。這樣造成的問題是當(dāng) DLLs 已被修改,重新進(jìn)行調(diào)用時(shí),內(nèi)存中保留的仍然可能是以前的版本,修改后的程序并沒有得到驗(yàn)證。對于這個(gè)問題,有以下兩種解決方法: DLL 卸出內(nèi)存; Windows,而后重新啟動(dòng),運(yùn)行相應(yīng)的程序。 同一般的應(yīng)用程序相比, DLL 中運(yùn)行時(shí)間錯(cuò)的處理是很困難的,而造成的后果也更為嚴(yán)重。因此要求程序設(shè)計(jì)者在編寫代碼時(shí)要有充分、周到的考慮。 庫初始化代碼的編寫 傳統(tǒng) Windows 中動(dòng)態(tài)鏈接庫的編寫,需要兩 個(gè)標(biāo)準(zhǔn)函數(shù): LibMain 和 WEP,用于啟動(dòng)和關(guān)閉 DLL。在 LibMain 中,可以執(zhí)行開鎖 DLL 數(shù)據(jù)段、分配內(nèi)存、初始化變量等初始化工作;而 WEP 在從內(nèi)存中移去 DLLs 前被調(diào)用,一般用于進(jìn)行必要的清理工作,如釋放內(nèi)存等。 Delphi 用自己特有的方式實(shí)現(xiàn)了這兩個(gè)標(biāo)準(zhǔn)函數(shù)的功能。這就是在工程文件中的 begin...end 部分添加初始化代碼。和傳統(tǒng)Windows 編程方法相比,它的主要特色是: 。一些必要的工作(如開鎖數(shù)據(jù)段)可以由系統(tǒng)自動(dòng)完成。所以大部分情況下用戶不會(huì)涉及到; 以設(shè)置多個(gè)退出過程,退出時(shí)按順序依次被調(diào)用; 和 WEP 對用戶透明,由系統(tǒng)自動(dòng)調(diào)用。 初始化代碼完成的主要工作是: 、分配全局內(nèi)存塊、登錄窗口對象等初始化工作。在 ()節(jié)“利用 DLLs 實(shí)現(xiàn)應(yīng)用程序間的數(shù)據(jù)傳輸”中,用于數(shù)據(jù)共享的全局內(nèi)存塊就是在初始化代碼中分配的。 DLLs 退出時(shí)的執(zhí)行過程。 Delphi 有一個(gè)預(yù)定義變量 ExitProc 用于指向退出過程的地址。用戶可以把自己的過程名賦給 ExitProc。系統(tǒng)自動(dòng)調(diào)用WEP 函數(shù),把 ExitProc 指 向的地址依次賦給 WEP 執(zhí)行,直到
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1