您好,欢迎来到尚车旅游网。
搜索
您的当前位置:首页实验七 动态链接库的制作与调用1

实验七 动态链接库的制作与调用1

来源:尚车旅游网
南昌航空大学实验报告

年 月 日

课程名称:面向对象程序设计 实验名称:动态链接库的制作与调用 班 级: 100462 学生姓名: 陈冬杨 学号: 10046213 指导教师评定: 签名:

一 用所学的内容编写一个动态链接库的文件

1、实验目的

(1) 了解和掌握类和指向函数的指针的使用。 (2) 了解和掌握宏的使用,

(3) 掌握动态链接库文件创建的过程。

2、实验要求

熟练掌握动态链接库文件的创建

3、实验步骤与内容

题目:创建一个动态链接库,实现画一棵树。 1).启动Visual C++6.0或者C++ Builder 5.0 .在WINDOWS98或WINDOWS 2000环境下,找到Visual C++6.0或者C++ Builder 5.0图标,双击之。为了不使Visual C++6.0或者C++ Builder 5.0的默认搜索路径与WINDOWS其他软件相冲突,清修改Visual C++6.0或者C++ Builder 5.0图标的属性。在属性|程序|批处理一栏中填上你自己的批处理程序名。以便启动时,首先运行你的批处理程序。然后在该批处理程序中,写上path=...路径。 2).设置用户程序子目录

设置用户程序子目录的目的是,将所有编程时产生的中间文件和最终执行程序文件全部 放在自己的目录中,以便管理。 3).创建和输入程序

Visual C++6.0启动后,要先建立一个project工程文件。方法为: ·选择File|new 菜单项,将弹出New 对话框。 ·单击Projects 选项卡

·在Location中填用户子目录路径

·在Project name中填入工程名(如MyDll)

·在列表中选择MFC AppWizard(dll),表示你编制的应用程序将生成动态链接库文件(.dll)

·按照提示创建一个自己想要的工程

 定位到mydll.h文件处,添加动态链接库的函数原型声明,下面为mydll.h的内容: …..

int DrawTree(CPaintDC *dc,int xStart,int yStart,double length,double angle,int num); class CMyDllApp : public CWinApp {…….. };

 定位到mydll.cpp 文件处,添加动态链接库中的函数的实现部分,下面为mydll.cpp

的内容: ……..

// The one and only CMyDllApp object CMyDllApp theApp;

int DrawTree(CPaintDC *dc,int xStart,int yStart,double length,double angle, int num) { int xEnd,yEnd; if (num==0) return 1; xEnd=xStart+(int)(length*cos(angle)); yEnd=yStart+(int)(length*sin(angle)); dc->MoveTo(xStart,yStart); dc->LineTo(xEnd,yEnd); DrawTree(dc,xEnd,yEnd,length*0.6,angle+0.624,num-1); DrawTree(dc,xEnd,yEnd,length*0.85,angle+0.08,num-1); DrawTree(dc,xEnd,yEnd,length*0.65,angle-0.6,num-1); return 1; }

 在mydll.def中引出DrawTree函数,下面为mydll.def的内容。 ; MyDll.def : Declares the module parameters for the DLL.

LIBRARY \"MyDll\"

DESCRIPTION 'MyDll Windows Dynamic Link Library' EXPORTS DrawTree

二 动态链接库文件的调用

1、实验目的

(1) (2) (3) (4) (5)

解和掌握类和指向函数的指针的使用。 了解和掌握宏的使用。

掌握如何显示调用动态链接库文件。 掌握如何隐示调用动态链接库文件。 调用动态链接库文件的步骤。

2、实验要求

熟练掌握在自己的应用程序中调用动态连接库文件的方法

3、实验步骤与内容

1) 启动Visual C++6.0或者C++ Builder 5.0

.在WINDOWS98或WINDOWS 2000环境下,找到Visual C++6.0或者C++ Builder 5.0图标,双击之。为了不使Visual C++6.0或者C++ Builder 5.0的默认搜索路径与WINDOWS其他软件相冲突,清修改Visual C++6.0或者C++ Builder 5.0图标的属性。在属性|程序|批处理一栏中填上你自己的批处理程序名。以便启动时,首先运行你的批处理程序。然后在该批处理程序中,写上path=...路径。

2)设置用户程序子目录

设置用户程序子目录的目的是,将所有编程时产生的中间文件和最终执行程序文件全部 放在自己的目录中,以便管理。 3)创建和输入程序

Visual C++6.0启动后,要先建立一个project工程文件。方法为: ·选择File|new 菜单项,将弹出New 对话框。 ·单击Projects 选项卡

·在Location中填用户子目录路径 ·在Project name中填入工程名

·在列表中选择MFC AppWizard(exe),表示你编制的应用程序将生成可执行文件(.exe) ·按照提示创建一个自己想要的工程 4)调用步骤

 隐示链接

包含导出函数(或C++类)声明的头文件(.h) 导入库(.lib)文件 实际的DLL(.dll)文件  显示链接

显示链接时,使用DLL的可执行程序在运行时通过函数调用来显示加载或卸载 DLL,并通过函数指针来调用DLL的导出函数,要显示链接DLL,应用程序必须

调用LoadLibrary来加载DLL,并获取模块句柄,调用GetProcAddress来获取应用程序要调用的导出函数的指针,使用完DLL后,应调用FreeLibrary来卸载DLL.

5)主要程序代码

定位到视图类 CtestDllView的实现TestDllView.cpp中的函数OnPaint处,加入下列的代码: void CTestDllView::OnPaint() { CPaintDC dc(this); // device context for painting

// typedef int(*DRAWTREE)(CPaintDC *,int,int,double,double, // int); typedef int(*DRAWTREE)(CPaintDC *,int,int,double,double,int); DRAWTREE DrawTree; CRect rect; GetClientRect(rect); FARPROC lpfn=NULL; HINSTANCE hinst=NULL; hinst=LoadLibrary(\"MyDll.dll\"); if (hinst==NULL) { AfxMessageBox(\"不能加载动态链接库\");

return; } lpfn=GetProcAddress(hinst,\"DrawTree\"); DrawTree=(DRAWTREE)lpfn; dc.SetMapMode(MM_LOENGLISH) ; if (lpfn==NULL)

AfxMessageBox(\"不能加载画树函数\"); else DrawTree(&dc,rect.right/2,-rect.bottom *9/10,(double)rect.bottom *0.2,1.57,9); FreeLibrary(hinst); // TODO: Add your message handler code here // Do not call CView::OnPaint() for painting messages }

4实验结果:

5.实验小结:

1. 本次实验主要按照老师所给步骤进行操作,编译时老是出现运行结果为空白的情况,最

后在将Mydll.dll和Mydll.lib文件拷入TestDll文件夹中并且加上ON_WM_PAINT()代码后可运行出结果。

2. 通过本次实验我们对动态数据库和创建和调用有了初步的了解,还需勤加练习。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sceh.cn 版权所有 湘ICP备2023017654号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务