?? chap9_1.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>9.1 用戶模塊</title>
<link rel="stylesheet" href="../../../cpcw.css"></head>
<body link="#3973DE" alink="#3973DE" background="../../bg.gif">
<div align="center"><center>
<table width="85%" border="0">
<tr bgcolor="#FFFFFF">
<td>
<div align="center">
<center>
</center>
</div>
<p align="CENTER"><b><font color="red">9.1 用戶模塊</font></b></p>
<p> 用戶模塊是由用戶自己開發(fā)的、可以加入到最終用戶(包括用戶本人和其他使用該模塊的人)應(yīng)用程序中提供某一特定功能的函數(shù)和類的集合。</p>
<p> 為了完成同樣的工作,也可以向最終用戶提供源程序。但是,使用用戶模塊有許多好處:首先是省去用戶管理源代碼的煩惱,用戶許多情況下往往并不關(guān)心模塊的內(nèi)部實(shí)現(xiàn),他只是想把它作為一個(gè)黑匣子使用。另外,模塊的開發(fā)者有時(shí)候并不希望模塊使用者看到源代碼。還有,使用模塊而不使用源代碼還可以避免模塊的函數(shù)名、變量名與最終用戶的程序上的沖突。</p>
<p> 用戶模塊可分為兩大類:靜態(tài)連接庫和動態(tài)連接庫。</p>
<p> 靜態(tài)連接庫提供了函數(shù)的完整的目標(biāo)代碼,如果程序調(diào)用靜態(tài)連接庫中的函數(shù),則在進(jìn)行連接時(shí)連接程序?qū)㈧o態(tài)連接庫中所包含的該函數(shù)的代碼拷貝至運(yùn)行文件中。</p>
<p> 動態(tài)連接庫是一個(gè)可執(zhí)行模塊,其包含的函數(shù)可以由Windows應(yīng)用程序調(diào)用以執(zhí)行一些功能。動態(tài)連接庫主要為應(yīng)用程序模塊提供服務(wù)。Windows內(nèi)核的三個(gè)模塊USER.EXE、KENERL.EXE和GDI.EXE實(shí)際上都是動態(tài)連接庫,分別提供用戶消息服務(wù)、進(jìn)程管理、圖形輸出等服務(wù)。</p>
<p> 動態(tài)連接庫也包含了其所提供的函數(shù)的目標(biāo)代碼,但是在程序連接動態(tài)連接庫中的函數(shù)時(shí),連接程序并不將包含在動態(tài)連接庫中的函數(shù)的目標(biāo)代碼拷貝至運(yùn)行文件,而只是簡單地記錄了函數(shù)的位置信息(即包含于哪個(gè)動態(tài)連接庫中以及在動態(tài)連接庫中的位置)。有了這些信息后,程序在執(zhí)行時(shí),即可找到該函數(shù)的目標(biāo)代碼。因?yàn)橹皇窃趫?zhí)行時(shí)才得到真正的連接,因此稱為動態(tài)連接。提供函數(shù)在動態(tài)連接庫中位置的信息存放在一個(gè)獨(dú)立的文件中,這個(gè)文件就是引入庫(IMPORT
LIB)。</p>
<p> 由于靜態(tài)連接庫將目標(biāo)代碼連接到應(yīng)用程序中,當(dāng)程序運(yùn)行時(shí),如果兩個(gè)程序調(diào)用了同一靜態(tài)庫中的函數(shù),內(nèi)存中將出現(xiàn)該函數(shù)的多份拷貝。而動態(tài)連接庫則更適合于多任務(wù)環(huán)境:當(dāng)兩個(gè)應(yīng)用程序調(diào)用了同一動態(tài)連接庫中的同一個(gè)函數(shù)時(shí),內(nèi)存中只保留該函數(shù)的一份拷貝,這樣內(nèi)存利用率更高。</p>
<p> 利用動態(tài)連接庫還可以實(shí)現(xiàn)資源共享:像Windows下的串行口、并行口驅(qū)動程序都是動態(tài)連接庫;另外,Windows下的字體也是動態(tài)連接庫。</p>
<p> 但是,靜態(tài)庫由于將目標(biāo)代碼連入應(yīng)用程序中,應(yīng)用程序可獨(dú)立運(yùn)行。而使用動態(tài)連接庫時(shí),隨同應(yīng)用程序還要提供動態(tài)連接庫文件(DLL文件)。比如,發(fā)布Visual
C++編寫的程序時(shí),如果使用了動態(tài)連接,則在提供可執(zhí)行文件同時(shí)還需要提供Visual C++的動態(tài)連接庫。</p>
<p> 應(yīng)用程序和動態(tài)連接庫都是完成一定功能的可執(zhí)行模塊。它們的區(qū)別是:應(yīng)用程序有自己的消息循環(huán),而動態(tài)連接庫沒有自己的消息循環(huán)(但是它可以發(fā)送消息);應(yīng)用程序一般是主動完成某一功能的,而動態(tài)連接庫主要是被動(在中斷驅(qū)動程序中也主動完成一些功能)的提供服務(wù)。</p>
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="615">
<tr>
<td><a href="chap9.htm">上一頁</a></td>
<td>
<p align="right"><a href="chap9_2.htm">下一頁</a>
</td>
</tr>
</table>
<p><a href="http://www.cpcw.com">電腦報(bào)首頁</a> <a href="../../index.htm">網(wǎng)絡(luò)學(xué)院首頁</a></p>
</center>
</div>
<hr noshade color="#3973DE" size="1">
<p align="center">本教程由<a href="http://vcdynasty.yeah.net">Visual C++王朝(Where
programmers come together)</a>協(xié)助制作<br>
未經(jīng)許可,請勿以任何形式復(fù)制
</td>
</tr>
</table>
<p> </p>
</center>
</div>
</body>
</html>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -