- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C实验报告七--动态链接库的制作与调用
南昌航空大学实验报告
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 C int __declspec(dllexport)add(int x, int y);
#endif
/* 文件名:lib.cpp */
#include lib.h
int add(int x, int y)
{
return x + y;
这两个文件建立结束后,执行“build”命令完成动态链接库的编译与生成,此时,在该工程目录下的“debug”目录下则会生成dllTest.dll和dllTest.lib文件。
然后,我们也建立一个与DLL工程处于同一工作区的应用工程dllCall,它调用DLL中的函数add
四、详细设计:
1、动态调用动态链接库方式
#include stdio.h
#include windows.h
typedef int(*lpAddFun)(int, int);
int main(int argc, char *argv[])
{
HINSTANCE hDll;
lpAddFun addFun;
hDll = LoadLibrary(..\\Debug\\dllTest.dll);
if (hDll != NULL)
{
addFun = (lpAddFun)GetProcAddress(hDll, add);
if (addFun != NULL)
{
int result = addFun(2, 3);
printf(%d, result);
}
FreeLibrary(hDll);
}
return 0;
}
2、静态调用动态链接库方式
#pragma comment(lib,dllTest.lib) //.lib文件中仅仅是关于其对应DLL文件中函数的重定位信息
xtern C __declspec(dllimport) add(int x,int y);
int main(int argc, char* argv[])
{
int result = add(2,3);
printf(%d,result);
return 0;
}
程序调试
经调试无误后,运行程序得到的结果为:
Area:3.141593 girth:6.283185
Press any key to continue.
六、实验总结:
1、实验时要耐心,按部就班进行,充分利用上机时间巩固所学动态链库的知识。
2、通过这次的试验,我明显的感觉到自己对这方面的知识掌握的还不够熟练,不能顺利地、流畅地运用这方面的知识,因为我没有在规定的时间内完成程序的设计,课后还是要多复习。
七附录(源代码程序):
DLL中定义的类在应用工程中使用
文件名:point.h,point类的声明
#ifndef POINT_H#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(doubl
文档评论(0)