关闭

vs2013创建及使用DLL

7350人阅读 评论(0) 收藏 举报
分类:

  这几天看了许多关于生成Dll的博文,很有感触,遂整理在此,以供自己后续参考。

VS2013创建DLL

我们使用vs2013来生成Dll,其实使用其他的版本也是同理如此。步骤如下:

  单击“新建项目”,选择“Win32 项目”,选择“下一步”,然后到了如下界面:

点击“DLL”,并同时点击“导出符号”。然后点击“完成”。

值得说明的是:

为什么要导出符号呢?

这是因为“导出符号”,将为我们创建生成DLL的模板。




仔细观察,vs自动为我们创建了导出变量nMakeDLL,导出函数fnMakeDLL,导出类CMakeDLL。如果上面没有点击“导出符号”,将不会生成这些。所以为了方便DLL的创建,我们最好还是使用“导出符号”。

接下来,你可以改写上面的类和函数,然后点击项目,选择“生成”即可产生DLL和LIB。此处细节可参考《vs2010创建并使用DLL》。

细节的阐述

1.dllexport与dllimport的介绍

先看下面这段代码:

#ifdef MAKEDLL_EXPORTS
#define MAKEDLL_API __declspec(dllexport)
#else
#define MAKEDLL_API __declspec(dllimport)
#endif

我们逐条解释。

如果定义了MAKEDLL_EXPORTS,然后我们再定义MAKEDLL_API为__declspec(dllexport),否则我们定义__declspec(dllimport)。前者主要为生成DLL的项目所使用,后者为使用DLL的项目所使用。dllexport  dllimport 存储类特性是 C 和 C++ 语言的 Microsoft 专用扩展。可以使用它们从 DLL 中导出或向其中导入函数、数据和对象。使用这两个特性,将会优化导入导出,至于具体怎么优化,可参考msdn上的解读《dllexport,dllimport》.

事实上MAKEDLL_EXPORTS在创建DLL时是默认定义的,每当创建一个新的DLL项目时,vs会自动生成MAKEDLL_EXPORTS,我们可以在项目的属性中看到:


2.lib与dll的使用

而在引用一个新的dll时,比如我们采用静态引用的方法时,我们一般需要dll的.h,.lib和.dll三个文件,这时我们在新建项目的“属性”中选择“C/C++”-》“常规”-》“附加包含目录”,添加.h的路径,在“链接器”—》“常规”-》“附加库目录”中添加.lib的路径,同时我们还需要添加.lib的附加依赖项,这时可在“链接器”—》“输入”—》“附加依赖项”,填写**.lib ,最后还需要加载dll的路径,此时有两种方法最为常见。第一种,我们先直接运行程序,这时会出现一个错误,说“缺少什么dll”,我们只需将此前生成的dll,放在debug或release目录下,即可编译通过。第二种方法,直接将dll放在与.cpp同一目录下,即可编译通过。或者你也可以放在某一个新建的bin文件下,然后在项目的“path”中填写.bin的路径,如下所示:

填写路径时注意,前面的"path=%path%;" 必须有,后面可填写绝对路径相对路径

另外我们再仔细讲讲lib的使用。

使用lib库有两个方法,一个是直接把lib引到工程目录下,在需要用到的地方include一下就可以。代码是:

#pragma comment(lib, "testCpp.lib")

另外一个方法是直接设置库路径,就不用把lib引到工程目录下了。直接点开工程属性,在配置属性-》连接器-》常规-》附加库目录中添加库

vs2013生成lib4


vs2013生成lib5


之后确认。

在配置属性-》连接器-》输入-》附加依赖项。如图填写

vs2013生成lib6


之后确定,运行工程就可以了。

总结一下,我们使用别人的库时,如果想偷懒的话,将.h,.lib,.dll都放在工程目录下,最后会发现我们需要在使用dll的main函数中加载上头文件,再像第一种方法一样,链接lib,就可以直接使用了。可参考文件:testDLL.zip

但是我更推崇另一种方法,就是我们单独建立include,bin,lib文件夹,然后将他们分别按照上面的方法链接上。这样如果要添加的库比较多时,会更加整齐,可读。

总的来说;.h,.lib,.dll的添加方法其实各有很多种,其中.h有两种:

1. 直接放在工程目录下

2. 建立include文件夹,放在里面,然后在项目属性的“C/C++”-》“常规”-》“附加包含目录”,添加.h路径即可。

.lib的方法有两种

1.直接放在工程目录下

2.建立lib文件夹,放在里面,然后在项目属性的“链接器”-》“常规”-》“附加库目录”,添加.lib路径即可。

dll的方法有两种

1.直接放在工程目录下

2.建立bin文件夹,放在里面,然后在项目“环境”中添加bin的路径

.lib的附加依赖项有2种:

1.在“链接器”——》“输入”-》“附加依赖项”,填写lib名称

2.在main文件前面,添加语句:

#pragma comment(lib, "testCpp.lib")
以上皆可以自由组合。



参考文献:

1.演练:创建和使用动态链接库 (C++)

2. C++的dllexport和dllimport 

3.VS2013创建dll动态链接库文件心得

4.VS2010创建并使用DLL













        


1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

VS2013环境生成和调用DLL动态链接库

创建动态库方法: 创建动态库是生成 .dll .lib 两个个文件 文件 -> 新建 -> 项目-> win32控制台应用程序 项目名称:DLLGenerator 应用程序类型:DLL ...
  • u010273652
  • u010273652
  • 2014-05-11 00:43
  • 24172

VS2013生成DLL文件

1、打开VS2013,创建项目,点DLL,输入项目名称,MakeDll,添加新项,来创建头文件MakeDll.h; MakeDll.h #define DLL_API __declspec(dllex...
  • langb2014
  • langb2014
  • 2015-09-12 11:56
  • 6524

VS2010下生成dll的方法

1.首先创建生成dll的项目:打开VS2010,两种途经建立dll项目,基于MFC DLL的和基于Win32控制台应用程序的,这里选择基于Win32控制台建立。     a.文件--新建--项目(项目...
  • u010666109
  • u010666109
  • 2013-12-12 18:17
  • 12023

如何编译生成dll

动态链接库是Windows的基石。所有的Win32 API函数都包含在DLL中。3个最重要的DLL是KERNEL32.DLL,它由管理内存、进程和线程的函数组成;USER32.DLL,它由执行用户界面...
  • qianchenglenger
  • qianchenglenger
  • 2014-03-25 18:52
  • 49785

VS2012下如何生成和调用DLL

做工程的人都知道,代码编写是一个模块化的过程,有时候,其中一部分在其他的项目中也会使用,于是就会想着把这些编写成DLL,方便调用,于是花了一些时间了解了下DLL的相关信息。 1、DLL和LIB的联系区...
  • cwt19902010
  • cwt19902010
  • 2017-01-23 10:23
  • 4113

VS2013创建并使用DLL

1.DLL文件 DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一...
  • hei_ya
  • hei_ya
  • 2016-06-29 21:48
  • 4881

VS2013添加动态链接库的两种方法(终结篇)

一、VS中添加LIb库及头文件(外部依赖项)的步骤:  1、添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录。  2、添加文件...
  • STL1634614466
  • STL1634614466
  • 2017-03-29 11:02
  • 3317

Windows下VS2013创建与使用动态链接库(.dll)

**一、创建动态链接库文件** 1、打开VS2013,选择文件,新建工程 2、选择新建W32控制台应用程序,这里将工程名改为makeDLL 3、在应用程序类型中选择DLL,点击完成 4、完成以...
  • LZH2912
  • LZH2912
  • 2017-04-01 17:27
  • 1942

vs2013创建和使用动态链接库

本文将创建一个简单的动态链接库,并编写一个应用台控制程序使用该动态链接库,并提出了与实现相关的几个问题,供初学者交流。 本文包含以下内容: 创建动态链接库项目 向动态链接库添加类 ...
  • qinzhenhua100
  • qinzhenhua100
  • 2017-03-19 21:08
  • 586

VS2013创建dll动态链接库文件心得

关于创建动态链接库文件,并在程序运行过程中连接调用,我是这么理解的; 首先要生成一个DLL文件和lib文件,才能够供给其他程序动态调用或者静态调用。这篇日志是关于动态调用的; 接下来是总结的一些具...
  • lushuner
  • lushuner
  • 2014-04-17 17:20
  • 50000
    个人资料
    • 访问:284566次
    • 积分:4122
    • 等级:
    • 排名:第8671名
    • 原创:117篇
    • 转载:82篇
    • 译文:8篇
    • 评论:106条
    个人网站
    最新评论