简单的总结一些动态链接库的一些知识,方便以后查找。
首先,新建一个动态链接库
(1) 打开编辑器,选择WIN32项目, dll,如下图,项目名字为:test,选择空项目。如下图
(2) 增加一个源文件,名字是:dll,如下图
(3) 编辑动态链接库就是为了使用动态链接库中的函数等一些东西,在这里,我们在原文件中编写两个函数(在函数头前加入_declspec(export)这是告诉编译器,此函数为“导出”函数,只有导出函数,我们才可以在其他程序中引用)。然后点击编译,如下图。
(4) 此时一个简单的动态链接库已经建立了,我们可以通过VS编译器自带的一个程序来检测我们导出的函数有哪些,首先我们要找到,.dll所在的文件夹,拷贝一下他所在的路径,在命令行下输入如下语句(dumpbin –exports + .dll所在路径)并在其后附上路径,回车,具体步骤如下图
(5) 我们可以看到,有两个函数,表示有两个函数是导出函数,尽管函数名是乱码(这个问题在后续会解决,此问题是因为编译器 名字改编)
(6) 此时,这两个函数我们可以在其他程序中使用了,首先我们新建一个对话框程序(项目名称:testdll),在其上添加两个按钮,其属性修改为如下图,此时我们要应用动态链接库中的两个函数,我们要把动态链接库中,.dll和.lib文件拷贝到当前的项目路径下。
(7) 我们把写好的.dll文件放到debug目录下(.dll文件只要放在testdll工程下即可,因为编译器会自动一级一级目录查找),但是要把把.lib文件拷贝到testdll程序所在的目录下,如下图,
此时我们要在VS编辑器下,在链接器中输入test.lib,然后应用,确定,这样才能让编译器找到引入库文件。如下图
(8) 此时,我们需要使用两个函数,还必须在程序中声明这两个函数是在外部定义的,是所在程序的”导入函数”,如下图。
(9) 我们为两个按钮建立消息响应函数,并编写如下代码,并且包含头文件
(10) Ctrl +F5 运行,点击按钮,可以正常的使用函数。
(11) 这是我们以隐式链接方式加载dll的方法。
在此,简单的介绍下,拷贝.dll和.lib文件的作用以及意义。
使用动态库时候,我们需要向程序提供两个文件,有一个引入库文件(.lib)和一个DLL(.dll)文件,对于一个DLL,其中引入库(.lib)包含该DLL导出的函数和变量的符号名,而.dll包含的是该DLL实际的函数和数据,在编译链接的时候,我们值需要引入库,而在程序执行的时候,才需要去加载DLL中导出的函数(这样才符合“动态链接库”这几个字的含义嘛)。
我们总结了如何建立以及使用DLL,但是仍有缺点,我们在使用第三方DLL时候,如果不通过一些工具(例如,dumpbin.exe等)是很难知道DLL中有哪些函数,此时我们可以使用一个技巧,就是在编写DLL时,我们把导出的函数统一放在一个头文件中(.h),使用DLL时,我们把头文件一同拷贝到程序的工程目录下,这样客户可以查看头文件,从而得到导出函数,对此
(1) 我们在dll项目中,增加一个头文件,在其中输入导出函数的声明,如下图
(2) 我们使用条件编译,这可以让一个头文件,发挥两个作用,不仅可以再DLL中声明“导出函数”,还可以在应用程序中声明DLL的“导入函数”
(3) 我们把新编辑好的DLL,重新生成,注意:每次我们只要修改DLL中的东西,我们都必须重新生成,然后把新生成的.dll和.lib文件拷贝到应用程序的目录下(现在当然也需要拷贝.h文件,.h文件与.lib放在一起就行),这一点很重要。
(4) 点击F7,运行,结果与优化之前的一样。
下一篇将会总结一下生成DLL时出现名字改编的问题,以及解决办法。以及如何在DLL中添加一个c++的类。(http://blog.csdn.net/u014028070/article/details/38510559点击打开链接)