環境:
VC++2008 Win7 32bit
使用動態鏈接庫具有以下優點:(1)隱藏源代碼;(2)實現代碼重用;(3)當程序調用DLL中的函數時不需要重新編譯,提高編譯速度;(4)當多個程序調用同一DLL中函數時,內存中只有一個副本,節省內存空間。
調用Dll時有2種方式:
運行時動態鏈接:(顯示鏈接)
應用程序調用LoadLibrary函數或LoadLibraryEx函數以在運行時加載DLL。成功加載DLL後,可以使用GetProcAddress函數獲得要調用的導出的DLL函數的地址。在使用運行時動態鏈接時,無需使用導入庫文件。
加載時動態鏈接:(隱式鏈接)
需要.dll .lib .h分別放在程序目錄下
a.工程比較小時,可將DLL,H和LIB文件直接複製到當前工程下,不需要添加環境變量。這時在包含對應頭文件時應當使用雙引號而不是尖括號。
b.工程比較大,則可以在本地硬盤的其它位置新建一個文件夾,命名爲myDllTest,再新建三個子文件夾bin,include和lib,將DLL文件放到bin中,H文件放到include中,LIB文件放到lib中。然後打開環境變量編輯器(在開始裏面直接輸入編輯系統環境變量,然後搜索即可)。新建環境變量myLibTest,變量值爲myDllTest文件夾所在目錄。然後編輯Path環境變量,添加語句%myDllTest%\bin;(不同的語句用;間隔)。
可以根據下面的 準則來判斷使用哪一種鏈接方式。
(1)啓動性能 如果應用程序的初始啓動性能很重要,則應使用運行時動態鏈接。
(2)易用性 在加載時動態鏈接中,導出的 DLL 函數類似於本地函數。這使您可以方便地調用這些函數。
(3)應用程序邏輯在運行時動態鏈接中,應用程序可以分支,以便按照需要加載不同的模塊。在開發多語言版本時,這一點很重要。
生成:加法函數
新建->項目->VC++->Win32控制檯應用程序->應用類型:DLL 附加選項爲空-> finlish
MyDll.h:
extern "C" _declspec(dllexport) int Sum(int a,int b);//加法函數
MyDll.cpp:
#include "MyDll.h" int Sum(int a,int b) { return a+b; }
單擊編譯後,及可生成DLL文件和Lib文件.
創建:
創建Win32工作臺程序,進行隱式鏈接.
copy 三個文件安裝目錄.
測試代碼如下:
#include "stdafx.h" #include "MyDll.h" #pragma comment(lib,"DllCreate.lib"); int _tmain(int argc, _TCHAR* argv[]) { int c=Sum(3,5); printf("a+b=%d",c); getchar(); return 0; }
測試通過