




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、創(chuàng)建和使用動(dòng)態(tài)鏈接庫(kù)(C+)Visual Studio 2008其他版本 動(dòng)態(tài)鏈接庫(kù)(DLL)是作為共享函數(shù)庫(kù)的可執(zhí)行文件。動(dòng)態(tài)鏈接提供了一種方法,使進(jìn)程可以調(diào)用不 屬于其可執(zhí)行代碼的函數(shù)。函數(shù)的可執(zhí)行代碼位于一個(gè)DLL中,該DLL包含一個(gè)或多個(gè)已被編譯、 鏈接并與使用它們的進(jìn)程分開(kāi)存儲(chǔ)的函數(shù)。DLL還有助于共享數(shù)據(jù)和資源。多個(gè)應(yīng)用程序可同時(shí)訪 問(wèn)內(nèi)存中單個(gè) DLL副本的內(nèi)容。動(dòng)態(tài)鏈接與靜態(tài)鏈接的不同之處在于:動(dòng)態(tài)鏈接允許可執(zhí)行模塊(.dll文件或.exe文件)僅包含在I 運(yùn)行時(shí)定位DLL函數(shù)的可執(zhí)行代碼所需的信息。在靜態(tài)鏈接中,鏈接器從靜態(tài)鏈接庫(kù)獲取所有被引 用的函數(shù),并將庫(kù)同代碼一起放到可
2、執(zhí)行文件中I 使用動(dòng)態(tài)鏈接代替靜態(tài)鏈接有若干優(yōu)點(diǎn)。DLL節(jié)省內(nèi)存,減少交換操作,節(jié)省磁盤空間,更易于升級(jí), 提供售后支持,提供擴(kuò)展MFC庫(kù)類的機(jī)制,支持多語(yǔ)言程序,并使國(guó)際版本的創(chuàng)建輕松完成。在本演練中,您將創(chuàng)建一個(gè)動(dòng)態(tài)鏈接庫(kù)(DLL),其中包含可供其他應(yīng)用程序使用的有用例程。使用DLL 是一種重用代碼的絕佳方式。您不必在自己創(chuàng)建的每個(gè)程序中重新實(shí)現(xiàn)這些例程,而只需對(duì)這些例程 編寫一次,然后從需要該功能的應(yīng)用程序引用它們即可。我們將創(chuàng)建的第一種類型的庫(kù)是動(dòng)態(tài)鏈接庫(kù)(DLL)。使用DLL是一種重用代碼的絕佳方式。您不必 在自己創(chuàng)建的每個(gè)程序中重新實(shí)現(xiàn)同一例程,而只需對(duì)這些例程編寫一次,然后從需要
3、該功能的應(yīng)用 程序引用它們即可。本演練涵蓋以下內(nèi)容:創(chuàng)建新的動(dòng)態(tài)鏈接庫(kù)(DLL)項(xiàng)目。向動(dòng)態(tài)鏈接庫(kù)添加類。創(chuàng)建引用動(dòng)態(tài)鏈接庫(kù)的應(yīng)用程序。在控制臺(tái)應(yīng)用程序中使用類庫(kù)的功能。運(yùn)行應(yīng)用程序。先決條件本主題假定您具備C+語(yǔ)言的基礎(chǔ)知識(shí)。創(chuàng)建新的動(dòng)態(tài)鏈接庫(kù)(DLL)項(xiàng)目從文件”菜單中,選擇新建”,然后選擇項(xiàng)目”。在項(xiàng)目類型”窗格中,選擇“Visual C+下的Win32”。在“模板”窗格中,選擇“Win32控制臺(tái)應(yīng)用程序”。4,為項(xiàng)目選擇一個(gè)名稱,如Ma比FuncsDll”,并將其鍵入名稱”字段。為解決方案選擇一個(gè)名稱,如DynamicLibrary”,并將其鍵入解決方案名稱”字段。單擊確定”啟動(dòng)Win
4、32應(yīng)用程序向?qū)?。在Win32應(yīng)用程序向?qū)А睂?duì)話框的概述”頁(yè)中,單擊 下一步”。在Win32應(yīng)用程序向?qū)А敝械膽?yīng)用程序設(shè)置”頁(yè)中,選擇應(yīng)用程序類型”下的DLL”(如果可 用),或者選擇控制臺(tái)應(yīng)用程序”(如果“DLL”不可用)。某些版本的Visual Studio不支持 通過(guò)使用向?qū)?chuàng)建DLL項(xiàng)目。您可以稍后對(duì)此進(jìn)行更改,以將項(xiàng)目編譯為DLL。在“Win32應(yīng)用程序向?qū)А钡摹皯?yīng)用程序設(shè)置”頁(yè)中,選擇“附加選項(xiàng)”下的“空項(xiàng)甲。單擊“完成”創(chuàng)建項(xiàng)目。向動(dòng)態(tài)鏈接庫(kù)添加類若要為新類創(chuàng)建頭文件,請(qǐng)從“項(xiàng)甲菜單中選擇“添加新項(xiàng)”。將顯示“添加新項(xiàng)”對(duì)話框。在 “類別”窗格中,選擇“Visual C+”下的“
5、代碼”。在“模板”窗格中選擇“頭文件(.h)”。為頭文件選 擇一個(gè)名稱,如Ma比FuncsDll.h”,并單擊“添加”。將顯示一個(gè)空白文件。添加一個(gè)名為“MyMa比Funcs”的簡(jiǎn)單類,以執(zhí)行常見(jiàn)的算術(shù)運(yùn)算,如加、減、乘和除。代碼 應(yīng)與以下內(nèi)容類似:/ MathFuncsDll.hnamespace MathFuncsclass MyMathFuncspublic:/ Returns a + bstatic _declspec(dllexport) double Add(double a, double b);/ Returns a - bstatic _declspec(dllexport)
6、 double Subtract(doubl e a, double b);/ Returns a * bstatic _declspec(dllexport) double Multiply(doubl e a, double b);/ Returns a / b/ Throws DivideByZeroException if b is 0static _declspec(dllexport) double Divide(doublea, double b);;3.4.5.請(qǐng)注意此代碼方法聲明中的_declspec(dllexport)修飾符。這些修飾符使DLL能夠?qū)С?該方法以供其他應(yīng)用
7、程序使用。有關(guān)更多信息,請(qǐng)參見(jiàn)dllexport, dllimport。若要為新類創(chuàng)建源文件,請(qǐng)從項(xiàng)目”菜單中選擇添加新項(xiàng).”。將顯示添加新項(xiàng)”對(duì)話框。在 類別”窗格中,選擇“Visual C+”下的代碼”。在模板”窗格中,選擇“C+文件(.cpp)”。為 源文件選擇一個(gè)名稱,如“Ma比FuncsDIl.cpp”,并單擊添加”。將顯示一個(gè)空白文件。在源文件中實(shí)現(xiàn)“MyMa比Funcs”的功能。代碼應(yīng)與以下內(nèi)容類似:/ MathFuncsDll.cpp/ compile with: /EHsc /LD #include MathFuncsDll.h#include /標(biāo)準(zhǔn)異常類using nam
8、espace std;namespace MathFuncsdouble MyMathFuncs:Add(double a, double b)return a + b;double MyMathFuncs:Subtract(double a, double b)return a - b;double MyMathFuncs:Multiply(double a, double b)return a * b;double MyMathFuncs:Divide(double a, double b)if (b = 0)throw new invalid_argument(b cannot be z
9、ero!); return a / b;若要將項(xiàng)目生成為DLL,請(qǐng)從項(xiàng)目”菜單中選擇“MathFuncsDll,再選擇屬性。在左窗格 中,選擇配置屬性”下的常規(guī)”。在右窗格中,將配置類型”更改為動(dòng)態(tài)庫(kù)(.dll)”。單擊確定” 保存更改。說(shuō)明:如果您從命令行生成項(xiàng)目,請(qǐng)使用/LD編譯器選項(xiàng)指定輸出文件應(yīng)為DLL。有關(guān)更多信息,請(qǐng)參見(jiàn) /MD、/MT、/LD (使用運(yùn)行時(shí)庫(kù))。編譯該動(dòng)態(tài)鏈接庫(kù),方法是選擇生成”菜單中的生成解決方案”。這樣就創(chuàng)建了一個(gè)可供其 他程序使用的DLL。有關(guān)DLL的詳細(xì)信息,請(qǐng)參見(jiàn)DLL創(chuàng)建引用動(dòng)態(tài)鏈接庫(kù)的應(yīng)用程序若要?jiǎng)?chuàng)建將引用并使用剛創(chuàng)建的動(dòng)態(tài)鏈接庫(kù)的應(yīng)用程序,請(qǐng)從文件
10、”菜單中選擇新建”,然 后選擇項(xiàng)目.”。在項(xiàng)目類型”窗格中,選擇“Visual C+”下的“Win32”。在“模板”窗格中,選擇“Win32控制臺(tái)應(yīng)用程序”。為項(xiàng)目選擇一個(gè)名稱(如“MyExecRefsDll”),并將其鍵入“名稱”字段。從“解決方案”旁邊的 下拉列表中選擇“添入解決方案”。這會(huì)將新項(xiàng)目添加到該動(dòng)態(tài)鏈接庫(kù)所屬的同一個(gè)解決方案 中。單擊“確定”啟動(dòng)“Win32應(yīng)用程序向?qū)А薄T凇癢in32應(yīng)用程序向?qū)А睂?duì)話框的“概述”頁(yè)中,單 擊“下一步”。在“Win32應(yīng)用程序向?qū)А钡摹皯?yīng)用程序設(shè)置”頁(yè)中,選擇“應(yīng)用程序類型”下的“控制臺(tái)應(yīng)用程序”。在“Win32應(yīng)用程序向?qū)А钡摹皯?yīng)用程序設(shè)置
11、”頁(yè)中,清除“附加選項(xiàng)”下的“預(yù)編譯頭”復(fù)選框。按“完成”創(chuàng)建項(xiàng)目。在控制臺(tái)應(yīng)用程序中使用類庫(kù)的功能創(chuàng)建新的控制臺(tái)應(yīng)用程序后,將為您創(chuàng)建一個(gè)空程序。源文件的名稱與您在前面為項(xiàng)目選擇 的名稱相同。在本示例中,名為“MyExecRefsDll.cpp”。若要使用在動(dòng)態(tài)鏈接庫(kù)中創(chuàng)建的算術(shù)例程,則必須引用該庫(kù)。為此,請(qǐng)選擇“項(xiàng)甲菜單中的“引 用.氣在“屬性頁(yè)”對(duì)話框中展開(kāi)“通用屬性”節(jié)點(diǎn),選擇“引用”,然后選擇“添加新引用.”按鈕。有關(guān)“引用.”對(duì)話框的更多信息,請(qǐng)參見(jiàn)“屬性頁(yè)”對(duì)話框-“通用屬 性”-“框架和引用”。顯示“添加引用”對(duì)話框。此對(duì)話框列出了所有可以引用的庫(kù)?!绊?xiàng)目”選項(xiàng)卡列出了當(dāng)前解決
12、 方案中的所有項(xiàng)目,以及它們包含的所有庫(kù)。在“項(xiàng)甲選項(xiàng)卡中,選擇“MathFuncsDll”。然 后單擊“確定”。有關(guān)“添加引用”對(duì)話框的更多信息,請(qǐng)參見(jiàn)“添加引用”對(duì)話框。若要引用動(dòng)態(tài)鏈接庫(kù)的頭文件,必須修改包含目錄路徑。為此,請(qǐng)?jiān)凇皩傩皂?yè)”對(duì)話框中展開(kāi)“配 置屬性”節(jié)點(diǎn),然后展開(kāi)“C/C+”節(jié)點(diǎn),并選擇“常規(guī)”。在“附加包含目錄”旁邊,鍵入 “MathFuncsDll.h ”頭文件所在位置的路徑。5.可執(zhí)行文件僅在運(yùn)行時(shí)加載動(dòng)態(tài)鏈接庫(kù)。必須告訴系統(tǒng)在哪里查找“MathFuncsDll.dll”。您可以通過(guò)使用PATH環(huán)境變量做到這一點(diǎn)。為此,請(qǐng)?jiān)趯傩皂?yè)”對(duì)話框中展開(kāi)配置屬性”節(jié)點(diǎn), 并選擇
13、調(diào)試”。在環(huán)境”旁邊鍵入以下內(nèi)容:PATH = Ma比FuncsDll.dll文件的路徑,其中MathFuncsDll.dll文件的路徑應(yīng)替換為MathFuncsDll.dll”的實(shí)際位置。單擊確定”保存所有更改。說(shuō)明:如果要從命令行而不是從Visual Studio運(yùn)行可執(zhí)行文件,則必須從命令提示符手動(dòng)更新PATH環(huán)境變量,如下所示:set PATH=%PATH%;,其中MathFuncsDll.dll文件的路徑應(yīng)替換為MathFuncsDll.dll”的實(shí)際位置。6.現(xiàn)在,可以在應(yīng)用程序中使用MyMathFuncs”類了。使用以下代碼替換MyExecRefsDll.cpp”的內(nèi)容:/ My
14、ExecRefsDll.cpp/ compile with: /EHsc /link MathFuncsDll.lib#include #include MathFuncsDll.husing namespace std;int main()double a = 7.4;int b = 99;cout a + b = MathFuncs:MyMathFuncs:Add(a, b) endl;cout a - b = MathFuncs:MyMathFuncs:Subtract(a, b) endl;cout a * b = MathFuncs:MyMathFuncs:Multiply(a, b) endl;cout a / b = MathFuncs:MyMathFuncs:Divide(a,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 司機(jī)雇傭勞務(wù)合同范本
- 化學(xué)助劑采購(gòu)合同范本
- 丹廈店面租房合同范本
- 中央團(tuán)校培訓(xùn)心得體會(huì)
- 運(yùn)城小學(xué)英語(yǔ)試卷
- 低壓電工試題庫(kù)含參考答案
- 會(huì)員服裝租賃合同范本
- 體現(xiàn)返利合同范本
- 中級(jí)電工考試模擬題(附參考答案)
- 烹飪?cè)现R(shí)??荚囶}含參考答案
- 部編版語(yǔ)文小學(xué)五年級(jí)下冊(cè)第一單元集體備課(教材解讀)
- 暖通12yn5通風(fēng)與防排煙工程
- GB/T 26559-2011機(jī)械式停車設(shè)備分類
- GB/T 1598-2010鉑銠10-鉑熱電偶絲、鉑銠13-鉑熱電偶絲、鉑銠30-鉑銠6熱電偶絲
- 數(shù)字化轉(zhuǎn)型中數(shù)據(jù)底座湖倉(cāng)一體化
- 保護(hù)野生動(dòng)物
- 統(tǒng)編版五年級(jí)下冊(cè)道德與法治全冊(cè)優(yōu)秀課件
- 《教育管理學(xué)》課件
- 凈水設(shè)備技術(shù)參數(shù)要求
- 《M公司員工忠誠(chéng)度分析案例報(bào)告》
- 腦血管造影護(hù)理課件
評(píng)論
0/150
提交評(píng)論