您的位置:首页 > 其它

VS 创建与使用动态链接库(.dll)

2018-03-31 14:04 405 查看

1.  创建动态链接库文件

步骤1:打开VS2013,选择文件,新建工程。选择新建W32控制台应用程序,这里将工程名改为makeDLL



步骤2:在应用程序类型中选择DLL,点击完成


完成以上步骤后,项目中会生成下列文件:

步骤3:下面创建自己编写的函数,以简单的求和函数add为例,首先在添加头文件createdll.hcreatedll.h中的代码如下:
#ifndef CREATEDLL_H_
#define CREATEDLL_H_

_declspec(dllexport) int add(int x, int y);/*_declspec(dllexport)声明一个导出函数,是说这个函数要从本DLL导出,我要给别人用。*/
int add(int x, int y);  //求和函数

#endif

步骤4:添加createdll.cpp文件,里面是对add函数的具体定义,如下所示#include"stdafx.h" //注意不要忘了添加这个预编译头文件,且要放在最上面
#include"createdll.h"
#include<iostream>

int add(int x, int y)
{
return x + y;
}最终项目中所有文件如下:



步骤5:选择生成解决方案,即可在项目中 生成exe文件 的Release文件夹(如果选择Debug就在Debug文件夹下) 中得到makeDLL.dll和makeDLL.lib两个文件。





对于生成的lib文件有如下解释: 

(1)如果有 dll 文件, 那么 lib 一般是一些索引信息, 记录了 dll 中函数的入口和位置;dll 中是函数的具体内容。
(2)如果只有 lib 文件,那么这个 lib 文件是静态编译出来 的,索引和实现都在其中。使用静态编译的 lib 文件,在运行程序时不需要再挂 动态库,缺点是导致应用程序比较大,而且失去了动态库的灵活性。

补充:还有一种方法,在自己编写的函数头文件createdll.h中不用添加下面这行:_declspec(dllexport) int add(int x, int y);但是生成解决方案后,x64文件夹下的Release文件夹(如果选择Debug就在Debug文件夹下) 中没有makeDLL.lib文件。还需要进一步操作:添加模块定义文件(.def)



Source.def中添加的内容如下:LIBRARY 项目名,即makeDLL
EXPORTS
第一个函数名,即int add(int x, int y) @1 NONAME
第二个函数名 @2 NONAME
......重新生成解决方案,在x64下的Release文件夹下就可以找到makeDLL.lib文件了。

2.  使用动态链接库文件

如果在自己新建的如test项目中需要调用已经封好的.dll文件中的函数,如上面的int add()函数。按下面操作,即可在项目的demo.cpp中直接:#include "函数头文件"就可以正常调用头文件中包含的函数了。
步骤1:将createdll.h文件复制到VC++ Project所在文件夹




步骤2:将makeDLL.dll文件复制到:test文件夹下的 x64文件夹下的 Release文件夹。与....Crack文件同一路径。




步骤3:在test文件夹中创建lib文件夹


步骤4:将makeDLL.lib文件复制到新建的lib文件夹中




步骤5:打开test项目,在项目右键——属性 里面配置文件(注意属性最上面的配置和平台也分别为:活动(Release)和活动(x64)):配置属性——VC++目录——库目录——编辑:加入test中新建的lib文件夹——确定——应用


链接器——输入——附加依赖项——编辑:加入makeDLL.lib——确定——应用


步骤6:下面就可以在test项目下的testdll.cpp中直接include "函数头文件",进而调用函数了。
#include <iostream>
#include "createdll.h" //调用add()函数的头文件
using namespace std;

int main()
{
cout << "2 + 3 = " << add(2, 3) << endl;

system("pause");
return 0;
}输出:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  .dll