vs2013创建及使用DLL
这几天看了许多关于生成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引到工程目录下了。直接点开工程属性,在配置属性-》连接器-》常规-》附加库目录中添加库
之后确认。
在配置属性-》连接器-》输入-》附加依赖项。如图填写
之后确定,运行工程就可以了。
总结一下,我们使用别人的库时,如果想偷懒的话,将.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
vs2013创建及使用DLL相关推荐
- C#创建和调用DLL
一.写在前面 C# 语言是一种简单但功能强大的编程语言,用于编写企业应用程序. C# 语言从C和 C++语言演化而来,在语句.表达式和运算符方面使用了许多 C++ 功能. C# 语言在类型安全性.版本 ...
- 在VS2010平台上创建并使用dll
一.为什么需要dll 代码复用是提高软件开发效率的重要途径.一般而言,只要某部分代码具有通用性,就可将它构造成相对独立的功能模块并在之后的项目中重复使用.比较常见的例子是各种应用程序框架,如ATL.M ...
- 怎么创建dllwenjian_如何创建和使用dll及lib文件
Abstract 如何在VC9环境下创建和使用dll及lib文件,但不用MFC. 一.创建dll 参见文章[zz]lib和dll文件的区别和联系.用方法一,在VC9下测试通过. 创建一个Dynamic ...
- 利用C语言创建和使用DLL文件
有感于讲C语言的DLL文件的文章很少,自己查了半天,写了这么个非常简单的教程.自己也是摸C语言不久,依然感觉处于编程苦手的阶段. 1)为什么使用DLL文件 C语言复用代码有很多 ...
- TB创建公式应用dll失败 请检查用户权限,终极解决方案
使用TB遇到问题, 编译公式时提示,创建公式应用dll失败,请检查用户权限 尝试了多种方法后最终搞定 将方案整理下,后续有遇到的战友可用参考下 1,权限问题:使用,右键,管理员权限启动 2,登录电脑系 ...
- 创建与使用DLL项目常见错误和解决办法
前面讲原理有点啰嗦,如果直接看创建和使用DLL,直接跳转到[DLL项目创建]. DLL 在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件, ...
- vb6调用python识别训练例子_在vb6中创建的“标准”dll在python中调用时会出现访问冲突...
从vb6dll导出函数的最简单方法是使用vbAdvance add-in,现在它是免费软件.在 您面临的问题是,您需要在调用导出的线程上初始化VB6运行时.这包括初始化COM单元(STA).最简单的方 ...
- 杂记2:VS2013创建Windows服务实现自动发送邮件
这篇随笔里,我将介绍如何用VS2013开发Windows服务项目,实现的功能是定时发送电子邮件. 开发环境:VS2013,SQL Server2008,采用C#语言开发 步骤一:创建Windows服务 ...
- C++ Builder创建和调用dll中的资源
程序开发中经常会用到一些图标.图片.光标.声音等,我们称它们为资源(Resource).当多个窗口用到同样的资源时,可以将这些公共的资源放到一个dll文件里调用,这样,由于定位资源比在磁盘中定位文件花 ...
最新文章
- python列表解析的新方法
- getbean方法找不到bean_和平精英:一直找不到敌人?5个方法,让你彻底摆脱“瞎子”...
- 操作系统中的同步和异步
- es6 语法 (Decorator)
- macOS Unlocker3.0
- 专注NLP、推荐等AI算法招聘群,慢者无,包括几乎所有公司最新信息
- 端侧机器学习框架 Tensorlfow Lite
- 聊聊React的路由React-Router、react-router-dom
- java简历vue专业技能_用vue 写一个好看的个人简历
- Beego 使用redigo连接redis
- Samsung Bada程序介绍——BeijingPark
- 中文写代码?开始不信后来用中文写了剧情小游戏!嗯,真香~
- 问佛----如果浮躁了,静下来看看
- XR872图传声传小例程——无线传输
- 关于EVAL()函数(一)
- 微信小程序上传多张图片
- 文件查重FindDupFile
- 浅谈激光的单色性与相干性
- 树根互联冲刺科创板上市:累计亏损超11亿元,和三一重工关系密切
- 第十三周 任务四