我接觸DLL的時間也不長,對DLL的了解也不是很深,在這裡以一個簡單的例子說明一下應用程序與DLL是如何工作的,希望給初學者一些幫助。文章附有源碼,以編譯通過。
一、創建動態鏈接庫:
1,啟動VC,在Project選項卡中選擇MFC AppWizard[dll],輸入工程名字,單擊OK,然後選擇MFC Extension DLL(using shared MFC DLL),單擊完成。
2,在cpp文件中定義函數ShowMessage(),如下所示: extern "C" _declspec(dllexport) void ShowMessage() { AfxMessageBox("The function is in the MFC Dll"); } 說明,extern "C" 表示該函數可以在不是用C++語言所寫的應用程序中使用。dllexport說明函數是導出函數。當然,要導出函數還可以在def文件中加入函數名即可。
3,編譯連接,生成dll文件(在debug目錄下)。
二、創建應用程序:
在這裡創建一個基於對話框的應用程序。添加一個編輯框,用於顯示所加載鏈接庫的路徑。三個按鈕,一個用於打開文件,讓用戶選擇所要加載的鏈接庫;一個用來加載鏈接庫並調用鏈接庫中的函數,另一個用於退出應用程序。 代碼如下所示:
void CUseDll2Dlg::OnSelect() //選擇所要加載的鏈接庫
{ // TODO: Add your control notification handler code here
CString filter;
filter="Dll(*.dll)|*.dll|All Files(*.*)|*.*||";
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,filter);
if(dlg.DoModal()==IDOK)
{ m_strPath=dlg.GetPathName(); }
UpdateData(FALSE);
}
void CUseDll2Dlg::OnButtonRun()
{ // TODO: Add your control notification handler code here
HMODULE hdll=::LoadLibrary(m_strPath);//加載鏈接庫
if(hdll==NULL) {
MessageBox("加載動態鏈接庫失敗!","Warning",MB_OK|MB_ICONWARNING); return;
}
typedef void (*pShow)();
pShow Show=(pShow)::GetProcAddress(hdll,"ShowMessage");
if(Show==NULL) {
MessageBox("The function can not be found!","Warning",MB_OK|MB_ICONWARNING);
} else
Show(); //調用
}