- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
动态链接库的使用方法
动态链接库是一堆变量,函数和类的集合体,供其它函数调用。
为什么要使用动态链接库,原因很多,其中三条1.可跨平台调用2.方便二次开发3.方便项目管理。
动态链接库的使用有两个方面,一是把原来的源代码做成动态链接库文件(即生成DLL和lib格式的文件),二是在其它源代码中使用动态链接库。
把源代码做成动态链接库文件
可以使用vc6.0及其以上的版本来做,直接建一个动态链接库工程,这个工程和其它的工程类似,有头文件和源文件,不同之处是在为了让DLL导出函数,需在每一个要导出的函数前添加标识符_declspec(dllexport)或declspec(dllimport)。
在头文件中,申明要导出的函数,类,以及一些全局变量。在源文件中,定义或实现头文件中要导出的函数,类以及变量。
做单独的头文件,该头文件可以同时用于动态链接库和使用动态链接库的程序。
为了方便的添加标识符,我们一般在头文件中使用宏定义,示例如下:
#ifdef DLL1_API
#else
#define DLL1_API _declspec(dllimport)
#endif
这样在后面的使用中,可以用DLL1_API来代替_declspec(dllimport),如下:
DLL1_API int add (int a,int b);
DLL1_API int subtract(int a,int b);
class DLL1_API Point
{
public:
void output(int x,int y);
};
在动态链接库的源文件中包含动态链接库头文件和一条宏定义
在源文件中,要重新定义标识符,使用_declspec(dllexport),所以在源文件中也要添加一条宏定义#define DLL1_API _declspec(dllexport),之后再包含头文件#include Dll1.h
二.在目标程序中调用动态链接库
在使用动态链接库的程序中隐式的调用动态链接库:
1.把动态链接库的头文件拷贝到目标程序目录下
2.在使用动态链接库的源文件中包含该头文件
3.拷贝动态链接库的两个文件到目标程序目录下
4.在vc6.0的工程/设置/连接 中的对象/库模块中输入动态链接库文件名,如DLL1.lib
三.其它
1.关于DLL中全局变量的定义
在头文件中声明,在源文件中定义,如:
在头文件中extern _declspec(dllimport) int num_cai1;
在源文件中则是int num_cai1=200;
2._declspec(dllexport)和_declspec(dllimport)在功能上没什么区别,使用哪个都一样,但是其标识的意义不同,export是输出,用在DLL中,表示该函数是DLL中要输出的函数。Import是输入,用在头文件中,该头文件也用于调用动态链接库的程序,表示头文件中声明的函数相对调用程序是输入函数。
文档评论(0)