操作系统实验一动态链接库的建立与调用.docx

上传人:b****6 文档编号:7201301 上传时间:2023-01-21 格式:DOCX 页数:12 大小:541.46KB
下载 相关 举报
操作系统实验一动态链接库的建立与调用.docx_第1页
第1页 / 共12页
操作系统实验一动态链接库的建立与调用.docx_第2页
第2页 / 共12页
操作系统实验一动态链接库的建立与调用.docx_第3页
第3页 / 共12页
操作系统实验一动态链接库的建立与调用.docx_第4页
第4页 / 共12页
操作系统实验一动态链接库的建立与调用.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

操作系统实验一动态链接库的建立与调用.docx

《操作系统实验一动态链接库的建立与调用.docx》由会员分享,可在线阅读,更多相关《操作系统实验一动态链接库的建立与调用.docx(12页珍藏版)》请在冰豆网上搜索。

操作系统实验一动态链接库的建立与调用.docx

操作系统实验一动态链接库的建立与调用

上海电力学院

计算机操作系统原理

实验报告

 

题  目:

 实验一动态链接库的建立与调用

院  系:

 计算机科学与技术学院

班级:

 

学生姓名:

 学号:

 

评语:

       

成绩:

   

2014年 10月10 日

 

上海电力学院

实验报告

课程名称:

计算机操作系统实验项目:

动态链接库的建立与实调用

姓名:

学号:

班级:

专业:

同组人姓名无指导教师姓名徐曼实验日期

一.实验目的和要求:

1.理解动态链接库的实现原理;

2.掌握WINDOWS系统动态链接库的建立方法;

3.掌握WINDOWS环境下动态链接库的调用方法。

4.掌握动态链接库建立和调用方法,在WINDOWSXP+VC++6.0环境下建立一个动态链接并分别使用隐式和显式将其调用,从而体会使用动态链接库的优点。

二.实验内容:

1.在Windows环境下建立一个动态链接库。

2.使用隐式调用法调用动态链接库。

3.使用显式调用法调用动态链接库。

三.实验平台:

VisualStudioC++6.0

4.实验原理

本次实验将在Windows7和VisualStudioC++6.0环境下建立一个动态链接库,分别使用隐式和显示的方式将其调用。

动态链接库是一个可执行模块,它包含的函数可以由Windows应用程序调用提供所需功能,为应用程序提供服务。

5.实验步骤与记录

1)启动VisualStudioC++6.0

2)选择file->new命令,新建一个Win32Dynamic-LinkLinrary程序。

3)创建一个简单的工程

4)用户直接使用DllMain的动态链接库入口函数

5)使用编译连接工具生成动态链接库

6)动态连接库的隐式调用首先建立一个Win32ConsoleApplication,在位置栏内输入工程文件名所在路径。

7)选择控制台文件类型:

一个支持MFC的程序,单击完成按钮。

8)用此文件中的CallDll.cpp调用前面建立好的函数动态链接库Mydll.dll

9)生成控可执行文件之前,把Mydll.dll复制到工程文件CallDll的debug文件中,将Mydll.lib复制到CallDll.cpp中,然后在MicrosoftVisualC++环境下,选择ProjectSetting命令,在连接选项中的ProjectOptions文本框中输入动态链接库的导入/导出库文件Mydll..lib

10)如果需要设置函数调用参数传递,在编辑环境中进行设置。

选择工程->设置,在C/C++选项中的Category下拉列表框中选择CodeGeneration,在Callingconvention选择_cdecl。

11)隐式调用实验结果截图:

12)选择file→new命令,选择Win32ConsoleApplication建立一个控制台工程文件Call。

13)选择一个支持MFC的程序

14)打开编辑环境,编译后,连接并运行程序。

15)显示调用实验结果截图

6.程序源代码

1.建立动态链接库Mydll.cpp文件源代码:

//jkh.cpp:

DefinestheentrypointfortheDLLapplication.

#include"stdafx.h"

extern"C"_declspec(dllexport)intAdd(intx,inty);

extern"C"_declspec(dllexport)intSub(intx,inty);

BOOLAPIENTRYDllMain(HANDLEhModule,

DWORDul_reason_for_call,

LPVOIDlpReserved

{

returnTRUE;

}

intAdd(intx,inty)

{

intz;

z=x+y;

returnz;

}

intSub(intx,inty)

{

intz;

z=x-y;

returnz;

}

2.隐式调用动态链接库CallDll.cpp文件源代码

#include"StdAfx.h"

extern"C"_declspec(dllimport)intAdd(intx,inty);

extern"C"_declspec(dllimport)intSub(intx,inty);

intmain(intargc,char*argv[])

{

intx=7;

inty=6;

intadd=0;

intsub=0;

printf("calldllnow!

\n");

add=Add(x,y);

sub=Sub(x,y);

printf("7+6=%d,7-6=%d\n",add,sub);

return0;

}

3.显示调用动态链接库Mydll.dll的Call.cpp文件源代码:

#include"StdAfx.h"

#include"Call.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

//Theoneandonlyapplicationobject

CWinApptheApp;

usingnamespacestd;

int_tmain(intargc,TCHAR*argv[],TCHAR*envp[])

{

ints;

intnRetCode=0;

typedefint(*pAdd)(intx,inty);

typedefint(*pSub)(intx,inty);

HMODULEhDll;

pAddadd;

pSubsub;

hDll=LoadLibrary("Mydll.dll");

if(hDll==NULL)

{

printf("LoadLibraryError......\n");

returnnRetCode;}

elseprintf("LoadLibrarySuccess.....\n");

add=(pAdd)GetProcAddress(hDll,"Add");

s=add(6,2);

printf("6+2=%d\n",s);

sub=(pSub)GetProcAddress(hDll,"Sub");

s=sub(6,2);

printf("6-2=%d\n",s);

FreeLibrary(hDll);

returnnRetCode;

}

7.实验小结

实验中遇到的问题:

①第八步中,将CallDll.cpp中文件运行,发现出现问题不能实现,后来发现是程序在编写过程中错误,将程序改正后编译正常。

②第九步中,生成可控制文件之前,需要把Mydll.dll复制到工程文件CallDll的debug文件中,将Mydll.lib复制到CallDll.cpp中,但在Mydll中却找不到Mydll.lib文件,不知道是什么原因,只能重新创建后找到了。

后面依次完成。

③在整个程序运行的过程中,刚开始出现无法连接的问题,在同学的帮助下,知道要将C++源程序文件夹创建在MicrosoftVisualC++的C盘中。

心得:

动态链接库是Windows下程序组织的一种重要方式,使用动态链接库可以极大的保护用户在不同开发工具,不同时期所作的工作,提高编程效率。

通过此次实验,让我对动态链接库有了更近一步的认识,掌握了动态链接库隐式和显式两种调用方法。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1