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引到工程目录下了。直接点开工程属性,在配置属性-》连接器-》常规-》附加库目录中添加库

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













        



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS UISegmentedControl 的使用

当用户输入不仅仅是布尔值时,可使用分段控件(UISegmentedControl)。分段控件提供一栏按钮(有时称为按钮栏),但只能激活其中一个按钮。分段控件会导致用户在屏幕上看到的内容发生变化。它们常用于在不同类别…

js粘贴板为什么获取不到图片信息_【第1829期】复制黏贴上传图片和跨浏览器自动化测试...

前言这个操作体验倒是不错。今日早读文章由丁香园蒋璇投稿分享。蒋璇, 前端开发攻城狮, 现任职于丁香园. 英语爱好者, 测试驱动开发(TDD)&行为驱动开发(BDD)推崇者. 先专注于 https://github.com/Jiang-Xuan/tuchuang.space 项目的测试驱动开发探索正文从这开始~~在网页中上…

《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一2.7 横式构图和竖式构图...

本节书摘来自异步社区出版社《淘宝网开店 拍摄 修图 设计 装修 实战150招》一书中的第2章,第2.7节,作者: 葛存山,更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.7 横式构图和竖式构图 横幅画面,即画面底边…

python request file upload_Python基于requests实现模拟上传文件

方法1: 1.安装requests_toolbelt依赖库 #代码实现 def upload(self): login_token self.token.loadTokenList() for token in login_token: tempPassword_url self.config[crm_test_api]/document/upload tempPassword_data self.data_to_str.strToDict(title:1.…

《OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例》——6.5节光照的每顶点计算与每片元计算...

本节书摘来自异步社区《OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例》一书中的第6章,第6.5节光照的每顶点计算与每片元计算,作者 吴亚峰,更多章节内容可以访问云栖社区“异步社区”公众号查看 6.5 光照…

如何在Debian上安装配置ownCloud

如何在Debian上安装配置ownCloud 据其官方网站,ownCloud可以让你通过一个Web界面或者WebDAV访问你的文件。它还提供了一个平台,可以轻松地查看、编辑和同步您所有设备的通讯录、日历和书签。尽管ownCloud与广泛使用Dropbox非常相似,但主要区别…

[转]js判断url是否有效

本文转自:http://www.cnblogs.com/fumj/p/3490121.html 方法一:(仅适用于ie) function CheckStatus(url){XMLHTTP new ActiveXObject("Microsoft.XMLHTTP")XMLHTTP.open("HEAD",url,false)XMLHTTP.send()return XMLHTTP.status200}function Ne…

32位md5解密_冰蝎特征检测及报文解密

点击“蓝字”关注我们,不迷路~‍‍前言19年驻场于某金融单位。参加19年9月、11月两次攻防演练,负责攻防演练组织、技术支持和复盘。期间,多个攻击队伍使用冰蝎 webshell ,防守方监测时确实各 IDS 确实报出 webshell 连接&#xff…

《移动App测试的22条军规》—App测试综合案例分析23.13节测试微信App的流量和电量消耗...

本节书摘来自异步社区《移动App测试的22条军规》一书中的App测试综合案例分析,第23.13节测试微信App的流量和电量消耗,作者黄勇,更多章节内容可以访问云栖社区“异步社区”公众号查看。 23.13 测试微信App的流量和电量消耗关于微信App消耗流…

python做数据可视化的代码_Python数据可视化正态分布简单分析及实现代码

Python说来简单也简单,但是也不简单,尤其是再跟高数结合起来的时候。。。 正态分布(Normaldistribution),也称“常态分布”,又名高斯分布(Gaussiandistribution),最早由A…

wpf window 不执行show 就不能load执行_Numpy反序列化命令执行漏洞分析(CVE-2019-6446)附0day...

1、介绍 NumPy 是 Python 机器学习库中之一,主要对于多为数组执行计算。NumPy 提供大量的 函数和操作,能够帮助程序员便利进行数值计算。在 NumPy 1.16.0 版本之前存在反序列化 命令执行漏洞,用户加载恶意的数据源造成命令执行。2、环境 软件…

使用Def文件导出dll

前面我们介绍了dll的生成,大多数是使用extern "C"__declspec(dllexport)函数名的方法导出dll。其实我们还有另一种方法来导出dll。 先介绍参考文献: 1.dll导出声明相关 2.VS2012中 C创建DLL图解 3.DLL中导出函数的两种方式(dllexport与.…

XML语法学习

本文章集合两篇博文而写&#xff0c;两篇博文地址&#xff1a; XML学习总结(二)——XML入门&#xff1a; XML基础<第一篇> XML简介 XML是一种标记语言&#xff0c;用于描述数据&#xff0c;它提供一种标准化的方式来来表示文本数据。XML文档以.xml为后缀。需要彻底注…

FM实现F4帮助系列三:弹出框多筛选…

FM实现F4帮助系列三&#xff1a;弹出框多筛选条件的搜索帮助&#xff08;根据搜索帮助筛选字段&#xff09;函数&#xff1a;F4IF_GET_SHLP_DESCRF4IF_START_VALUE_REQUEST效果图&#xff1a;本例子代码&#xff1a;找到需要的帮助:*&------------------------------------…

《计算复杂性:现代方法》——0.2 判定问题/语言

本节书摘来自华章计算机《计算复杂性&#xff1a;现代方法》一书中的第0章&#xff0c;第0.2节&#xff0c;作者 &#xff3b;美&#xff3d;桑杰夫阿罗拉&#xff08;Sanjeev Arora&#xff09;&#xff0c;博阿兹巴拉克&#xff08;Boaz Barak&#xff09;&#xff0c;译 骆吉…

python从date目录导入数据集_使用python划分数据集

无论是训练机器学习或是深度学习&#xff0c;第一步当然是先划分数据集啦&#xff0c;今天小白整理了一些划分数据集的方法&#xff0c;希望大佬们多多指教啊&#xff0c;嘻嘻~ 首先看一下数据集的样子&#xff0c;flower_data文件夹下有四个文件夹&#xff0c;每个文件夹表示一…

开源牛人 zcbenz

事情是这样的&#xff0c;微软推出了Visual Studio Code&#xff0c;我很好奇他怎么做跨平台的&#xff0c;所以就找找资料&#xff0c;在他的网站中是这么描述的&#xff1a; Architecturally, Visual Studio Code combines the best of web, native, and language-specific t…

eclipse 与 tomcat 的那些路径

我们用mvn创建了一个web工程&#xff0c;同时希望在eclipse里调试开发。mvn有mvn的路径要求&#xff0c;eclispe有eclipse的默认路径&#xff0c;怎么整合二者&#xff1f; 首先介绍一下eclipse的默认路径。 重点在Server Locations里面。 下面我们把[workspace]/.metadata\.pl…

python数据处理常用函数_pandas数据分析常用函数总结大全:上篇

基础知识在数据分析中就像是九阳神功&#xff0c;熟练的掌握&#xff0c;加以运用&#xff0c;就可以练就深厚的内力&#xff0c;成为绝顶高手自然不在话下&#xff01; 为了更好地学习数据分析&#xff0c;我对于数据分析中pandas这一模块里面常用的函数进行了总结。整篇总结&…

从运维角度浅谈MySQL数据库优化

一个成熟的数据库架构并不是一开始设计就具备高可用、高伸缩等特性的&#xff0c;它是随着用户量的增加&#xff0c;基础架构才逐渐完善。这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案&#xff0c;暂且抛开前端应用不说&#xff0c;大致分为以下五个阶段&#x…