1、实验七 动态链接库的建立与调用一、实验目的(1) 理解动态链接库的实现原理。(2) 掌握 Windows 系统动态链接库的建立方法。(3) 掌握 Windows 环境下动态链接库的调用方法。二、实验预备内容(1) 动态链接库基础知识;(2) 动态链接库入口函数;(3) 动态链接库导入/导出函数;(4) 动态链接库的两种链接方式(隐式链接、显式链接) ;(5) 函数调用参数传递约定。三、实验内容(1) 在 Windows 环境下建立一个动态链接库。(2) 使用隐式调用法调用动态链接库。(3) 使用显式调用法调用动态链接库。四、实验要求掌握动态链接库建立和调用方法。在 WindowsXP+Micr
2、osoft Visual C+环境下建立一个动态链接库,并分别使用隐式和显式方式将其调用,从而体会使用动态链接库的优点。该实验完成了动态链接库的建立和调用。函数 Add()和 Sub()在动态链接库文件 SimpleDll.cpp 中,分别完成两个整数的相加和相减。而调用该动态链接库的程序文件是 CallDll.cpp,程序运行结果如下:/ SimpleDll.cpp : Defines the entry point for the DLL application./#include “stdafx.h“extern “C“ _declspec(dllexport) int Add(int
3、x,int y);extern “C“ _declspec(dllexport) int Sub(int x,int y);BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)return TRUE;int Add(int x,int y)代码 1 /加法定义int Sub(int x,int y)代码 2 /减法定义/隐式调用动态链接库的程序/ CallDll.cpp : Defines the entry point for the console application./#
4、include “stdafx.h“extern “C“ _declspec(dllimport) int Add(int x,int y);extern “C“ _declspec(dllimport) int Sub(int x,int y);int main(int argc, char* argv)int x=7; int y=6;int add=0;int sub=0;printf(“Call Dll Now!n“);add=代码 3;sub=代码 4; /隐式调用动态链接库printf(“ 7+6=%d ,7-6=%dn“,add,sub);return 0;/显式调用动态链接库的
5、程序/ CallDllAddress.cpp : Defines the entry point for the console application./#include “stdafx.h“#include “CallDllAddress.h“#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ The one and only application objectCWinApp theApp;using namespace std;int _tmain(int ar
6、gc, TCHAR* argv, TCHAR* envp)int s;int nRetCode = 0;typedef int (*pAdd)(int x,int y);typedef int (*pSub)(int x,int y);HMODULE hDll;pAdd add;pSub sub;hDll=LoadLibrary(“SimpleDll.dll“); /加载动态链接库文件 if(hDll=NULL)printf(“LoadLibrary Error.n“);return nRetCode;else printf(“LoadLibrary Success.n“);add=代码 5;
7、 /得到动态链接库中函数 Add()的内部地址 s=代码 6; /显式调用printf(“6+2=%dn“,s);sub=代码 7; /得到动态链接库中函数 Sub()的内部地址s=代码 8; /显式调用printf(“6-2=%dn“,s);FreeLibrary(hDll); /释放动态链接库return nRetCode;四、思考本实验介绍了在 WindowsXP+Microsoft Visual C+6.0 环境下建立与调用动态链接库的方法,使用动态链接库,除了可以节省内存空间、实现代码共享之外,还可以实现多种编程语言书写的程序相互调用。同学们在完成上述实验的基础上,可以自学完成其它语言如 Java 书写的程序调用 Visual C+建立动态链接库,从中体会多种语言编程给程序员带来的方便。