第十五章C語(yǔ)言模塊化編程,C語(yǔ)言多文件編譯_第1頁(yè)
第十五章C語(yǔ)言模塊化編程,C語(yǔ)言多文件編譯_第2頁(yè)
第十五章C語(yǔ)言模塊化編程,C語(yǔ)言多文件編譯_第3頁(yè)
第十五章C語(yǔ)言模塊化編程,C語(yǔ)言多文件編譯_第4頁(yè)
第十五章C語(yǔ)言模塊化編程,C語(yǔ)言多文件編譯_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第第10頁(yè)共 頁(yè)retua-rb;n動(dòng)態(tài)鏈接庫(kù)的加載:隱式加載載入時(shí)加載和顯式加載運(yùn)行時(shí)加載靜態(tài)鏈接庫(kù)在鏈接時(shí),編譯器會(huì)將文件和文件組織成一個(gè)文件,程序運(yùn)行時(shí),將全部數(shù)據(jù)加載到內(nèi)存。如果程序體積較大,功能較為復(fù)雜,那么加載到內(nèi)存中的時(shí)間就會(huì)比較長(zhǎng),最直接的一個(gè)例子就是雙擊打開(kāi)一個(gè)軟件,要很久才能看到界面。這是靜態(tài)鏈接庫(kù)的一個(gè)弊端。動(dòng)態(tài)鏈接庫(kù)有兩種加載方式:隱式加載和顯示加載。隱式加載又叫載入時(shí)加載,指在主程序載入內(nèi)存時(shí)搜索,并將載入內(nèi)存。隱式加載也會(huì)有靜態(tài)鏈接庫(kù)的問(wèn)題,如果程序稍大,加載時(shí)間就會(huì)過(guò)長(zhǎng),用戶(hù)不能接受。顯式加載又叫運(yùn)行時(shí)加載,指主程序在運(yùn)行過(guò)程中需要中的函數(shù)時(shí)再加載。顯式加載是將較

2、大的程序分開(kāi)加載的,程序運(yùn)行時(shí)只需要將主程序載入內(nèi)存,軟件打開(kāi)速度快,用戶(hù)體驗(yàn)好。隱式加載首先創(chuàng)建一個(gè)工程,命名為,添加源文件,內(nèi)容如下:復(fù)制純文本新窗口8,也可以是也可以是124inta=10,b=5;printf(a+b=%dn,add(a,b);printf(a-b=%dn,sub(a,b);return0;18找到上節(jié)創(chuàng)建的工程,將目錄下的和復(fù)制到當(dāng)前工程目錄下。前面已經(jīng)說(shuō)過(guò):文件包含導(dǎo)出的函數(shù)和變量的符號(hào)名,只是用來(lái)為鏈接程序提供必要的信息,以便在鏈接時(shí)找到函數(shù)或變量的入口地址;文件才包含實(shí)際的函數(shù)和數(shù)據(jù)。所以首先需要將引入到當(dāng)前項(xiàng)目。選擇”工程設(shè)置“菜單,打開(kāi)工程設(shè)置對(duì)話框,選擇”

3、鏈接“選項(xiàng)卡,在”對(duì)象庫(kù)模塊“編輯框中輸入,如下圖所示:但是這樣引入文件有一個(gè)缺點(diǎn),就是將源碼提供給其他用戶(hù)編譯時(shí),也必須手動(dòng)引入文件,麻煩而且容易出錯(cuò),所以最好是在源碼中引入文件,如下所示:更改上面的代碼:復(fù)制純文本新窗口1920,122232425262728return30點(diǎn)擊確定回到項(xiàng)目,編譯、鏈接并運(yùn)行,輸出結(jié)果如下在中除了用還可以用關(guān)鍵字聲明和函數(shù)來(lái)自外部文件,標(biāo)識(shí)符聲明函數(shù)來(lái)自動(dòng)態(tài)鏈接庫(kù)。為了更好的進(jìn)行模塊化設(shè)計(jì),最好將和函數(shù)的聲明放在頭文件中,整理后的代碼如下:,復(fù)制純文本新窗口1323334_de363738復(fù)制純文本新窗口3940414,ina=t1pri(4pri(ret

4、urn47顯式加載顯式加載動(dòng)態(tài)鏈接庫(kù)時(shí),需要用到函數(shù),該函數(shù)的作用是將指定的可執(zhí)行模塊映射到調(diào)用進(jìn)程的地址空間。函數(shù)的原型聲明如下所示:函數(shù)不僅能夠加載,還可以加載可執(zhí)行模塊。一般來(lái)說(shuō),當(dāng)加載可執(zhí)行模塊時(shí),主要是為了訪問(wèn)該模塊內(nèi)的一些資源,例如位圖資源或圖標(biāo)資源等。函數(shù)有一個(gè)字符串類(lèi)型的參數(shù),該參數(shù)指定了可執(zhí)行模塊的名稱(chēng),既可以是一個(gè)文件,也可以是一個(gè)文件。如果調(diào)用成功,函數(shù)將返回所加載的那個(gè)模塊的句柄。該函數(shù)的返回類(lèi)型是。類(lèi)型和類(lèi)型可以通用。當(dāng)獲取到動(dòng)態(tài)鏈接庫(kù)模塊的句柄后,接下來(lái)就要想辦法獲取該動(dòng)態(tài)鏈接庫(kù)中導(dǎo)出函數(shù)的地址,這可以通過(guò)調(diào)用函數(shù)來(lái)實(shí)現(xiàn)。該函數(shù)用來(lái)獲取導(dǎo)出函數(shù)的地址,其原型聲明如下

5、所示:可以看到,函數(shù)有兩個(gè)參數(shù),其含義分別如下所述:指定動(dòng)態(tài)鏈接庫(kù)模塊的句柄,即函數(shù)的返回值。:字符串指針,表示中函數(shù)的名字。首先創(chuàng)建一個(gè)工程,命名為,添加源文件,內(nèi)容如下:復(fù)制純文本新窗口必須包含指向函數(shù)的指針11if(dllDemo)12add=(FUNADDR)GetProcAddress(dllDemo,add);13sub=(FUNADDR)GetProcAddress(dllDemo,sub);14else15printf(FailtoloadDLL!n);16system(pause);exit(1);1920printf(a+b=%dn,add(a,b);21printf(a-

6、b=%dn,sub(a,b);22system(pause);return0;復(fù)制到當(dāng)前函數(shù)、復(fù)制到當(dāng)前函數(shù)、工程目錄下。注意,只需要,不需要運(yùn)行程序,輸出結(jié)果與上面相同。類(lèi)型、類(lèi)型在中定義;函數(shù)是,也在中定義。通過(guò)以上的例子,我們可以看到,隱式加載和顯式加載這兩種加載的方式各有優(yōu)點(diǎn),如果采用動(dòng)態(tài)加載方式,那么可以在需要時(shí)才加載、而隱式鏈接方式實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,在編寫(xiě)程序代碼時(shí)就可以把鏈接工作做好,在程序中可以隨時(shí)調(diào)用導(dǎo)出的函數(shù)。但是,如果程序需要訪問(wèn)十多個(gè)、如果都采用隱式鏈接方式加載它們的話,那么在該程序啟動(dòng)時(shí),這些都需要被加載到內(nèi)存中,并映射到調(diào)用進(jìn)程的地址空間,這樣將加大程序的啟動(dòng)時(shí)間。而且,一般來(lái)說(shuō),在程序運(yùn)行過(guò)程中只是在某個(gè)條件滿(mǎn)足時(shí)才需要訪問(wèn)某個(gè)中的某個(gè)函數(shù),其他情況下都不需要訪問(wèn)這些中的函數(shù)。但是這時(shí)所有的都已經(jīng)被加載到內(nèi)存中,資源浪費(fèi)是比較嚴(yán)重的。在這種情況下,就可以采用顯式加載的方式訪問(wèn),在需

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論