C++实验报告七--动态链接库的制作与调用
更新时间:2023-10-24 18:31:01 阅读量: 综合文库 文档下载
南昌航空大学实验报告
2011年12月11号
课程名称: 面向对象程序设计B
实验名称: 动态链接库的制作与调用(多项式矩阵定义) 班级: 姓名: 同组人: 无
指导教师评定: 签名: 一、实验目的
综合运用所学面向对象编程知识完成动态链接库文件的创建、调用,理解动态链接库的工作原理,体会声明和定义分开方法在程序设计中的优势,掌握利用动态链接库实现不同开发平台间混合编程的方法,掌握利用动态链接库实现代码可复用技术,进一步掌握混合开发的方法。
二、实验内容
综合应用所学面向对象编程知识定义一个多项式矩阵类并应用该类实现多项式矩阵类的运算。具体实现该矩阵的加法(采用运算符“+”重载)、转置(采用运算符“-”重载)及输出(采用运算符“<<”重载)操作。将该类制作为动态链接库,然后在其他工程中对该动态链接库进行调用。
三、动态链接库示例
首先我们做一个动态链接库提供add函数接口的方法,在VC++中new一个Win32 Dynamic-Link Library工程dllTest。注意不要选择MFC AppWizard(dll)。 在建立的工程中添加lib.h及lib.cpp文件,源代码如下: /* 文件名:lib.h */ #ifndef LIB_H #define LIB_H
extern \#endif
/* 文件名:lib.cpp */ #include \int add(int x, int y) {
return x + y; }
1
这两个文件建立结束后,执行“build”命令完成动态链接库的编译与生成,此时,在该工程目录下的“debug”目录下则会生成dllTest.dll和dllTest.lib文件。
然后,我们也建立一个与DLL工程处于同一工作区的应用工程dllCall,将刚刚生成的两个文件拷贝到该共分成目录下,它调用DLL中的函数add。
四、详细设计:
1、动态调用动态链接库方式
#include
typedef int(*lpAddFun)(int, int); int main(int argc, char *argv[]) {
HINSTANCE hDll; lpAddFun addFun;
hDll = LoadLibrary(\if (hDll != NULL) {
addFun = (lpAddFun)GetProcAddress(hDll, \if (addFun != NULL) {
int result = addFun(2, 3); printf(\}
FreeLibrary(hDll); } return 0; }
2、静态调用动态链接库方式
#pragma comment(lib,\文件中仅仅是关于其对应DLL文件中函数的重定位信息
extern \int main(int argc, char* argv[]) {
int result = add(2,3); printf(\return 0; }
2
五、程序调试
经调试无误后,运行程序得到的结果为: Area:3.141593 girth:6.283185 Press any key to continue.
六、实验总结:
1、实验时要耐心,按部就班进行,充分利用上机时间巩固所学动态链库的知识。 2、通过这次的试验,我明显的感觉到自己对这方面的知识掌握的还不够熟练,不能顺利地、流畅地运用这方面的知识,因为我没有在规定的时间内完成程序的设计,课后还是要多复习。
七附录(源代码程序):
DLL中定义的类在应用工程中的使用 //文件名:point.h,point类的声明
#ifndef #define POINT_H #ifdef DLL_FILE
class _declspec(dllexport) point //导出类point #else
class _declspec(dllimport) point //导入类point #endif { public: double y; double x; point();
point(double x_coordinate, double y_coordinate); }; #endif
//文件名:point.cpp,point类的实现 #ifndef DLL_FILE #define DLL_FILE #endif
#include \//类point的缺省构造函数 point::point() { x = 0.0;
3
POINT_H
y = 0.0; }
//类point的构造函数
point::point(double x_coordinate, double y_coordinate) {
x = x_coordinate; y = y_coordinate; }
//文件名:circle.h,circle类的声明 #ifndef CIRCLE_H #define CIRCLE_H #include \ #ifdef DLL_FILE
class _declspec(dllexport)circle //导出类circle #else
class _declspec(dllimport)circle //导入类circle #endif { public:
void SetCentre(const point &rePoint); void SetRadius(double r); double GetGirth(); double GetArea(); circle(); private: double radius;
4
point centre; }; #endif
//文件名:circle.cpp,circle类的实现 #ifndef DLL_FILE #define DLL_FILE #endif
#include \#define PI 3.1415926 //circle类的构造函数 circle::circle() {
centre = point(0, 0); radius = 0; }
//得到圆的面积
double circle::GetArea() {
return PI *radius * radius; }
//得到圆的周长
double circle::GetGirth() {
return 2 *PI * radius; }
//设置圆心坐标
void circle::SetCentre(const point &rePoint) {
centre = rePoint; }
//设置圆的半径
void circle::SetRadius(double r) {
radius = r; }
类的引用:
5
#include \ //包含类声明头文件 #pragma comment(lib,\int main(int argc, char *argv[]) { circle c;
point p(2.0, 2.0); c.SetCentre(p); c.SetRadius(1.0);
printf(\return 0; }
6
正在阅读:
学生自我反省检讨书怎么写 通用的万能检讨书300字09-10
高等教育心理学课后复习题及答案05-14
中考作文如何审题05-16
2011年世界各国人均国民总收入排行榜04-20
煤矿三违现象剖析及其预防对策05-30
爱粮从这一刻起作文500字07-15
印刷配套墨斗自动供墨系统05-26
如何提高话题式英语教学的有效性05-31
桃江二中紧急疏散演练方案11-29
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- C++
- 调用
- 实验
- 链接
- 报告
- 制作
- 动态
- 第6讲:标数法、递推法(小升初计数重点考查内容)练习题补充包
- 机械制图习题集答案1-5
- 高中数学文科知识点
- 利用盖革计数器测量核衰变的统计规律实验报告 - 图文
- 6 又好又快 科学发展 教学设计 教案
- 西门子贴片机D4操作方法及注意事项
- 2020年八年级物理上册1.4人耳听不到的声音习题提优训练新版苏科版
- 小学音乐人音版六年级上册5赞美的心《聆听 黄河颂》比赛获奖教案优质课公开课优秀教案
- 2016年完美版美丽中国与生态文明建设 满分题库
- 新任会长讲话
- 宿迁人力资源服务机构设立申请书
- 冀教版五年级科学上册复习题及答案
- 餐饮具清洗消毒保洁管理制度
- 综合评估法
- 青岛版四年级下册科学各单元学习重点、习题、科学实验汇总
- 2015企业所得税练习题
- 医院工会主席对照检查材料(定稿)
- 集团公司管控十大问题(白万钢)
- 给排水-常用专有名词中英文对照
- 法律逻辑学练习题