




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、創(chuàng)建和使用動態(tài)鏈接庫(C+)Visual Studio 2008其他版本 動態(tài)鏈接庫(DLL)是作為共享函數(shù)庫的可執(zhí)行文件。動態(tài)鏈接提供了一種方法,使進程可以調(diào)用不 屬于其可執(zhí)行代碼的函數(shù)。函數(shù)的可執(zhí)行代碼位于一個DLL中,該DLL包含一個或多個已被編譯、 鏈接并與使用它們的進程分開存儲的函數(shù)。DLL還有助于共享數(shù)據(jù)和資源。多個應(yīng)用程序可同時訪 問內(nèi)存中單個 DLL副本的內(nèi)容。動態(tài)鏈接與靜態(tài)鏈接的不同之處在于:動態(tài)鏈接允許可執(zhí)行模塊(.dll文件或.exe文件)僅包含在I 運行時定位DLL函數(shù)的可執(zhí)行代碼所需的信息。在靜態(tài)鏈接中,鏈接器從靜態(tài)鏈接庫獲取所有被引 用的函數(shù),并將庫同代碼一起放到可
2、執(zhí)行文件中I 使用動態(tài)鏈接代替靜態(tài)鏈接有若干優(yōu)點。DLL節(jié)省內(nèi)存,減少交換操作,節(jié)省磁盤空間,更易于升級, 提供售后支持,提供擴展MFC庫類的機制,支持多語言程序,并使國際版本的創(chuàng)建輕松完成。在本演練中,您將創(chuàng)建一個動態(tài)鏈接庫(DLL),其中包含可供其他應(yīng)用程序使用的有用例程。使用DLL 是一種重用代碼的絕佳方式。您不必在自己創(chuàng)建的每個程序中重新實現(xiàn)這些例程,而只需對這些例程 編寫一次,然后從需要該功能的應(yīng)用程序引用它們即可。我們將創(chuàng)建的第一種類型的庫是動態(tài)鏈接庫(DLL)。使用DLL是一種重用代碼的絕佳方式。您不必 在自己創(chuàng)建的每個程序中重新實現(xiàn)同一例程,而只需對這些例程編寫一次,然后從需要
3、該功能的應(yīng)用 程序引用它們即可。本演練涵蓋以下內(nèi)容:創(chuàng)建新的動態(tài)鏈接庫(DLL)項目。向動態(tài)鏈接庫添加類。創(chuàng)建引用動態(tài)鏈接庫的應(yīng)用程序。在控制臺應(yīng)用程序中使用類庫的功能。運行應(yīng)用程序。先決條件本主題假定您具備C+語言的基礎(chǔ)知識。創(chuàng)建新的動態(tài)鏈接庫(DLL)項目從文件”菜單中,選擇新建”,然后選擇項目”。在項目類型”窗格中,選擇“Visual C+下的Win32”。在“模板”窗格中,選擇“Win32控制臺應(yīng)用程序”。4,為項目選擇一個名稱,如Ma比FuncsDll”,并將其鍵入名稱”字段。為解決方案選擇一個名稱,如DynamicLibrary”,并將其鍵入解決方案名稱”字段。單擊確定”啟動Win
4、32應(yīng)用程序向?qū)?。在Win32應(yīng)用程序向?qū)А睂υ捒虻母攀觥表撝?,單?下一步”。在Win32應(yīng)用程序向?qū)А敝械膽?yīng)用程序設(shè)置”頁中,選擇應(yīng)用程序類型”下的DLL”(如果可 用),或者選擇控制臺應(yīng)用程序”(如果“DLL”不可用)。某些版本的Visual Studio不支持 通過使用向?qū)?chuàng)建DLL項目。您可以稍后對此進行更改,以將項目編譯為DLL。在“Win32應(yīng)用程序向?qū)А钡摹皯?yīng)用程序設(shè)置”頁中,選擇“附加選項”下的“空項甲。單擊“完成”創(chuàng)建項目。向動態(tài)鏈接庫添加類若要為新類創(chuàng)建頭文件,請從“項甲菜單中選擇“添加新項”。將顯示“添加新項”對話框。在 “類別”窗格中,選擇“Visual C+”下的“
5、代碼”。在“模板”窗格中選擇“頭文件(.h)”。為頭文件選 擇一個名稱,如Ma比FuncsDll.h”,并單擊“添加”。將顯示一個空白文件。添加一個名為“MyMa比Funcs”的簡單類,以執(zhí)行常見的算術(shù)運算,如加、減、乘和除。代碼 應(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.請注意此代碼方法聲明中的_declspec(dllexport)修飾符。這些修飾符使DLL能夠?qū)С?該方法以供其他應(yīng)用
7、程序使用。有關(guān)更多信息,請參見dllexport, dllimport。若要為新類創(chuàng)建源文件,請從項目”菜單中選擇添加新項.”。將顯示添加新項”對話框。在 類別”窗格中,選擇“Visual C+”下的代碼”。在模板”窗格中,選擇“C+文件(.cpp)”。為 源文件選擇一個名稱,如“Ma比FuncsDIl.cpp”,并單擊添加”。將顯示一個空白文件。在源文件中實現(xiàn)“MyMa比Funcs”的功能。代碼應(yīng)與以下內(nèi)容類似:/ MathFuncsDll.cpp/ compile with: /EHsc /LD #include MathFuncsDll.h#include /標準異常類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;若要將項目生成為DLL,請從項目”菜單中選擇“MathFuncsDll,再選擇屬性。在左窗格 中,選擇配置屬性”下的常規(guī)”。在右窗格中,將配置類型”更改為動態(tài)庫(.dll)”。單擊確定” 保存更改。說明:如果您從命令行生成項目,請使用/LD編譯器選項指定輸出文件應(yīng)為DLL。有關(guān)更多信息,請參見 /MD、/MT、/LD (使用運行時庫)。編譯該動態(tài)鏈接庫,方法是選擇生成”菜單中的生成解決方案”。這樣就創(chuàng)建了一個可供其 他程序使用的DLL。有關(guān)DLL的詳細信息,請參見DLL創(chuàng)建引用動態(tài)鏈接庫的應(yīng)用程序若要創(chuàng)建將引用并使用剛創(chuàng)建的動態(tài)鏈接庫的應(yīng)用程序,請從文件
10、”菜單中選擇新建”,然 后選擇項目.”。在項目類型”窗格中,選擇“Visual C+”下的“Win32”。在“模板”窗格中,選擇“Win32控制臺應(yīng)用程序”。為項目選擇一個名稱(如“MyExecRefsDll”),并將其鍵入“名稱”字段。從“解決方案”旁邊的 下拉列表中選擇“添入解決方案”。這會將新項目添加到該動態(tài)鏈接庫所屬的同一個解決方案 中。單擊“確定”啟動“Win32應(yīng)用程序向?qū)А?。在“Win32應(yīng)用程序向?qū)А睂υ捒虻摹案攀觥表撝?,?擊“下一步”。在“Win32應(yīng)用程序向?qū)А钡摹皯?yīng)用程序設(shè)置”頁中,選擇“應(yīng)用程序類型”下的“控制臺應(yīng)用程序”。在“Win32應(yīng)用程序向?qū)А钡摹皯?yīng)用程序設(shè)置
11、”頁中,清除“附加選項”下的“預編譯頭”復選框。按“完成”創(chuàng)建項目。在控制臺應(yīng)用程序中使用類庫的功能創(chuàng)建新的控制臺應(yīng)用程序后,將為您創(chuàng)建一個空程序。源文件的名稱與您在前面為項目選擇 的名稱相同。在本示例中,名為“MyExecRefsDll.cpp”。若要使用在動態(tài)鏈接庫中創(chuàng)建的算術(shù)例程,則必須引用該庫。為此,請選擇“項甲菜單中的“引 用.氣在“屬性頁”對話框中展開“通用屬性”節(jié)點,選擇“引用”,然后選擇“添加新引用.”按鈕。有關(guān)“引用.”對話框的更多信息,請參見“屬性頁”對話框-“通用屬 性”-“框架和引用”。顯示“添加引用”對話框。此對話框列出了所有可以引用的庫?!绊椖俊边x項卡列出了當前解決
12、 方案中的所有項目,以及它們包含的所有庫。在“項甲選項卡中,選擇“MathFuncsDll”。然 后單擊“確定”。有關(guān)“添加引用”對話框的更多信息,請參見“添加引用”對話框。若要引用動態(tài)鏈接庫的頭文件,必須修改包含目錄路徑。為此,請在“屬性頁”對話框中展開“配 置屬性”節(jié)點,然后展開“C/C+”節(jié)點,并選擇“常規(guī)”。在“附加包含目錄”旁邊,鍵入 “MathFuncsDll.h ”頭文件所在位置的路徑。5.可執(zhí)行文件僅在運行時加載動態(tài)鏈接庫。必須告訴系統(tǒng)在哪里查找“MathFuncsDll.dll”。您可以通過使用PATH環(huán)境變量做到這一點。為此,請在屬性頁”對話框中展開配置屬性”節(jié)點, 并選擇
13、調(diào)試”。在環(huán)境”旁邊鍵入以下內(nèi)容:PATH = Ma比FuncsDll.dll文件的路徑,其中MathFuncsDll.dll文件的路徑應(yīng)替換為MathFuncsDll.dll”的實際位置。單擊確定”保存所有更改。說明:如果要從命令行而不是從Visual Studio運行可執(zhí)行文件,則必須從命令提示符手動更新PATH環(huán)境變量,如下所示:set PATH=%PATH%;,其中MathFuncsDll.dll文件的路徑應(yīng)替換為MathFuncsDll.dll”的實際位置。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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 木材定金合同范本
- 會計臨時勞務(wù)合同范本
- 勞務(wù)派遣合同范本購買
- 協(xié)議證明合同范本
- 業(yè)委會與物業(yè)委托合同范本
- 別墅規(guī)劃合同范本
- 區(qū)域保護合同范本
- 農(nóng)村房子修繕承包合同范本
- 公園門衛(wèi)服務(wù)合同范本
- 包裝費合同范本
- 數(shù)字化轉(zhuǎn)型中數(shù)據(jù)底座湖倉一體化
- 典范英語8-1-刺猬女孩艾蜜
- 統(tǒng)編版五年級下冊道德與法治全冊優(yōu)秀課件
- 《教育管理學》課件
- 水平井套內(nèi)不動管柱滑套多段壓裂工藝技術(shù)全解課件
- 凈水設(shè)備技術(shù)參數(shù)要求
- 腦血管造影護理課件
- 稱呼禮儀精品課件
- 課題申報講座課件
- 系統(tǒng)科學與系統(tǒng)工程的理論基礎(chǔ)
- 思想道德與法治課件:第四章 第二節(jié) 社會主義核心價值觀的顯著特征
評論
0/150
提交評論