操作系统实验一_动态链接库的建立与调用.doc_第1页
操作系统实验一_动态链接库的建立与调用.doc_第2页
操作系统实验一_动态链接库的建立与调用.doc_第3页
操作系统实验一_动态链接库的建立与调用.doc_第4页
操作系统实验一_动态链接库的建立与调用.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

- 12 -上海电力学院 计算机操作系统原理实验报告 题目:实验一 动态链接库的建立与调用 院系:计算机科学与技术学院 班 级: 学生姓名: 学号: 评 语: 成 绩: 2014年10 月 10日上海电力学院实验报告课程名称: 计算机操作系统 实验项目 :动态链接库的建立与实调用 姓名: 学号: 班级: 专业 : 同组人姓名 无 指导教师姓名 徐曼 实验日期 一实验目的和要求:1.理解动态链接库的实现原理;2.掌握WINDOWS系统动态链接库的建立方法;3.掌握WINDOWS环境下动态链接库的调用方法。4.掌握动态链接库建立和调用方法,在WINDOWS XP+VC+6.0环境下建立一个动态链接并分别使用隐式和显式将其调用,从而体会使用动态链接库的优点。二实验内容:1.在Windows环境下建立一个动态链接库。2.使用隐式调用法调用动态链接库。3.使用显式调用法调用动态链接库。三实验平台: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)动态连接库的隐式调用首先建立一个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)如果需要设置函数调用参数传递,在编辑环境中进行设置。选择工程-设置,在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 DLL application.#include stdafx.hextern C_declspec(dllexport) int Add(int 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)int z;z=x+y;return z;int Sub(int x,int y)int z;z=x-y;return z;2.隐式调用动态链接库CallDll.cpp文件源代码#include StdAfx.hextern 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=Add(x,y);sub=Sub(x,y);printf(7+6=%d,7-6=%dn,add,sub);return 0;3.显示调用动态链接库Mydll.dll的Call.cpp文件源代码:#include StdAfx.h#include 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 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);printf(6+2=%dn,s);sub=(pSub)GetProcAddress(hDll,Sub);s=sub(6,2);printf(6-2=%dn,s);FreeLibrary(hDll);return nRetCode;7 实验小结实验中遇到的问题:第八步中,将CallDll.cpp中文件运行,发现出现问题不能实现,后来发现是程序在编写过程中错误,将程序改正后编译正常。第九步中,生成可控制文件之前,需要把Mydll.dll复制到工程文件CallDll的debug文件中,将Mydll.lib复制到CallDll.cpp中,但在Mydll中却找不到Mydll.lib文件,不知道是什么原因,只能重新创建后找到了。后面依次完成。在整个程序运行的过程中,刚开始出现无法连接的问题,在同学的帮助下,知道要将C+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论