这里不再介绍动态链接库概念等知识,纯粹新建一个项目用来表述怎么在运行时调用动态链接库,代码中会给出相关注释。开发工具用的是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、编译执行,即可运行成功。