這里不再介紹動態鏈接庫概念等知識,純粹新建一個項目用來表述怎么在運行時調用動態鏈接庫,代碼中會給出相關注釋。開發工具用的是VS2010旗艦版。
一、創建動態鏈接庫項目:
1.新建項目——選擇Win32項目,輸入名稱后(這里我輸入的項目名稱為sunlib),然后選擇下一步,在隨后的應用程序類型中選擇 “DLL”,單擊完成,即可完成創建DLL項目
如下圖所示:
2.在DLL項目中添加導出函數,函數可以添加在dllmain.cpp中,也可以添加在sumlib.cpp中,這里添加在sumlib.cpp中:
//這里添加一個計算兩數和的導出函數 // extern "C"表示函數可以被C語言引用 // _declspec(dllexport)指定這是一個到處函數 extern "C"_declspec(dllexport) int sum(int a,int b) { return a+b; }
添加代碼后,啟動調試就可以在sumlib項目文件夾下的Debug文件夾下看到生成的sumlib.dll和sumlib.lib文件:
二、加載和使用DLL
1.新建一個基於對話框的MFC項目,命名為MFCEx7,界面設計如下圖:
2.使用加載時動態鏈接的程序需要導入庫(*.lib文件),在MFCEx7項目中,打開MFCEx7項目屬性框,依次選擇——連接器——輸入,在附加依賴項中添加sumlib.lib:
此時,需要把sumlib項目生成的sumlib.lib文件和sumlib.dll文件復制到MFCEx7項目文件夾下;
3.為ADD按鈕添加點擊事件響應函數:
HINSTANCE hinstLib; PROCSUM procsum; BOOL fFreeResult; //加載DLL文件,獲取DLL句柄 hinstLib = LoadLibrary(L"sumlib.dll"); //句柄有效,獲取sum函數地址 if ( hinstLib != NULL ) { procsum = (PROCSUM)GetProcAddress(hinstLib,"sum"); if( procsum != NULL ) { CEdit *pSumEdit=(CEdit*)GetDlgItem(IDC_EDIT_SUM); int a = GetDlgItemInt(IDC_EDIT_A); int b = GetDlgItemInt(IDC_EDIT_B); CString szSum; szSum.Format(_T("%d"),a+b); pSumEdit->SetWindowText(szSum); } fFreeResult = FreeLibrary(hinstLib); }
4、編譯執行,即可運行成功。