1、评 语: 成 绩: 2014年10 月 10日课程名称: 计算机操作系统 实验项目 :动态链接库的建立与实调用 姓名: 学号: 班级: 专业 :同组人姓名 无 指导教师姓名 徐曼 实验日期 一实验目的和要求:1.理解动态链接库的实现原理;2.掌握WINDOWS系统动态链接库的建立方法;3.掌握WINDOWS环境下动态链接库的调用方法。4.掌握动态链接库建立和调用方法,在WINDOWS XP+VC+6.0环境下建立一个动态链接并分别使用隐式和显式将其调用,从而体会使用动态链接库的优点。二实验内容:1.在Windows环境下建立一个动态链接库。2.使用隐式调用法调用动态链接库。3.使用显式调用法调
2、用动态链接库。三实验平台:Visual Studio C+ 6.04实验原理 本次实验将在Windows 7和Visual Studio C+ 6.0环境下建立一个动态链接库,分别使用隐式和显示的方式将其调用。动态链接库是一个可执行模块,它包含的函数可以由Windows应用程序调用提供所需功能,为应用程序提供服务。5实验步骤与记录1)启动Visual Studio C+ 6.02)选择file-new命令,新建一个Win32 Dynamic-Link Linrary 程序。3)创建一个简单的工程4)用户直接使用DllMain的动态链接库入口函数5)使用编译连接工具生成动态链接库6)动态连接库的
3、隐式调用首先建立一个Win32 Console Application,在位置栏内输入工程文件名所在路径。7)选择控制台文件类型:一个支持MFC的程序,单击完成按钮。8)用此文件中的CallDll.cpp调用前面建立好的函数动态链接库Mydll.dll9)生成控可执行文件之前,把Mydll.dll复制到工程文件CallDll的debug文件中,将Mydll.lib复制到CallDll.cpp中,然后在Microsoft Visual C+环境下,选择ProjectSetting 命令,在连接选项中的Project Options 文本框中输入动态链接库的导入/导出库文件Mydll.lib10)
4、如果需要设置函数调用参数传递,在编辑环境中进行设置。选择工程-设置,在C/C+选项中的Category下拉列表框中选择CodeGeneration,在Calling convention 选择_cdecl。11)隐式调用实验结果截图:12)选择filenew命令,选择Win32 Console Application建立一个控制台工程文件Call。13)选择一个支持MFC的程序14)打开编辑环境,编译后,连接并运行程序。15)显示调用实验结果截图6程序源代码1.建立动态链接库Mydll.cpp文件源代码:/ jkh.cpp : Defines the entry point for the D
5、LL application.#include stdafx.hextern C_declspec(dllexport) int Add(int x,int y);_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) int z; z=x+y; return z;int Sub(int x,int y) z=x-y;2.隐式调用动态
6、链接库CallDll.cpp文件源代码StdAfx.h_declspec(dllimport) int Add(int x,int y);_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=Add(x,y); sub=Sub(x,y);7+6=%d,7-6=%dn,add,sub); return 0;3.显示调用动态链接库Mydll.dll的Call.cpp文件源代码
7、:Call.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 argc, TCHAR* argv, TCHAR* envp) int s; int nRetCode=0; typedef int(* pAdd)(int x,int y); typedef int(* pSub)(int x,int
8、y); HMODULE hDll; pAdd add; pSub sub; hDll=LoadLibrary(Mydll.dll if(hDll=NULL) printf(LoadLibrary Error.n return nRetCode; else printf(LoadLibrary Success.n add=(pAdd)GetProcAddress(hDll,Add s=add(6,2);6+2=%dn,s); sub=(pSub)GetProcAddress(hDll,Sub s=sub(6,2);6-2=%dn FreeLibrary(hDll); return nRetCod
9、e;7实验小结实验中遇到的问题:第八步中,将CallDll.cpp中文件运行,发现出现问题不能实现,后来发现是程序在编写过程中错误,将程序改正后编译正常。第九步中,生成可控制文件之前,需要把Mydll.dll复制到工程文件CallDll的debug文件中,将Mydll.lib复制到CallDll.cpp中,但在Mydll中却找不到Mydll.lib文件,不知道是什么原因,只能重新创建后找到了。后面依次完成。在整个程序运行的过程中,刚开始出现无法连接的问题,在同学的帮助下,知道要将C+源程序文件夹创建在Microsoft Visual C+的C盘中。心得:动态链接库是Windows下程序组织的一种重要方式,使用动态链接库可以极大的保护用户在不同开发工具,不同时期所作的工作,提高编程效率。通过此次实验,让我对动态链接库有了更近一步的认识,掌握了动态链接库隐式和显式两种调用方法。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1