我接触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(); //调用 } |