用C++创建属于自己的类库?
来源:互联网 发布:windows安全模式怎么进 编辑:程序博客网 时间:2024/06/01 10:30
使用Visual Studio 2013创建类库,然后加载类库
目的:vs环境下用C++如何创建属于自己的类库和加载使用自己的类库。
概念介绍:
DLL:一个包含有 函数,类,变量 定义和实现的代码和数据的库。(在程序运行可以动态的链接,这样一个多个程序使用同一个Dll中的内容,不要进行反复复制。)
Lib:第一种:静态链接库(Static Library);第二种:导入文件(Import Library)。
静态链接库是是在编译的时候和可执行程序打包到一起的,lib中包含函数和类的实现,这是静态链接库。(它是目标对象obj的集合)
DLL在导出时,有时没有lib文件,有时有lib文件,而存在的这种lib文件就是导出文件,到出库。这样的(lib),导入文件,包含DLL导出的函数和变量的符号名,而真实的函数的实现和数据存在于DLL。
C++的dllexport和dllimport__declspec(dllexport)
__declspec(dllexport)
声明一个导出函数,是说这个函数要从本DLL导出。我要给别人用。一般用于dll中省掉在DEF文件中手工定义导出哪些函数的一个方法。当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函数,只能用__declspec(dllexport)导出类
__declspec(dllimport)
声明一个导入函数,是说这个函数是从别的DLL导入。我要用。一般用于使用某个dll的exe中 不使用 __declspec(dllimport) 也能正确编译代码,但使用 __declspec(dllimport) 使编译器可以生成更好的代码。编译器之所以能够生成更好的代码,是因为它可以确定函数是否存在于 DLL 中,这使得编译器可以生成跳过间接寻址级别的代码,而这些代码通常会出现在跨 DLL 边界的函数调用中。但是,必须使用 __declspec(dllimport) 才能导入 DLL 中使用的变量。
为什么叫导入文件,就是把Dll中导出的函数,类给导入到我们自己的应用程序中使用。
使用方法:
1、静态链接库(lib),我们使用隐式链接;
2、动态链接库(DLL),不包含lib导入文件,我们用显式链接。但是这样会很麻烦,我不喜欢这样用,我会想尽方法让它带有lib文件。
3、动态链接库(DLL),包含lib导入文件,我们使用 隐式链接。
看到了吧,我的主张是使用隐式链接。我的实验就是使用隐式链接。
下面看完整的截图:
步骤一:创建DLL的过程:
步骤二:学习这里面的书写格式,和添加自己的代码(学会后自己创建,或者直接子啊里面修改)
补充一下:在写之前,请了解__declspec(dllexport) __declspec(dllimport)的作用。
上面的生成一下,我不再截图。
步骤三:实验
(我这属于静态加载,上面我说了)。
1、main中添加头文件;
2、加载lib;
3、使用。
实验中的其它工具的使用截图:
这个实验我又是尝试了很多次,好几天,真的非常的没有意义,其实只需要最多5分钟的事。
- 用C++创建属于自己的类库?
- 创建一个属于自己的开发类库
- 创建属于自己的CComboBox
- 创建属于自己的网站
- 创建属于自己的静态库,并合并静态库
- 怎么创建属于自己的库--Android Studio Gradle Jitpack
- codec_engine 创建属于自己的例子
- 创建属于自己的代码仓库吧!
- 创建属于自己的代码仓库吧!
- 如何创建属于自己的一个论坛
- Android创建属于自己的开源库
- 利用Jsoup创建属于自己的信息库
- 创建属于自己的私用android仓库
- hexo+GitHub创建属于自己的博客
- 开始写一个属于自己的类库SqlHelper
- 快速开发一个属于自己的android数据库类库
- ABBYY创建属于自己的PDF的方法
- 创建属于自己的页面,自定义初始界面
- HashMap, HashSet, HashMap Iterator
- js中event.keyCode用法及keyCode对照表
- windows窗口程序一个诡异的bug
- 从MVC到前后端分离
- android 点击、滑动事件的处理 GestureDetector
- 用C++创建属于自己的类库?
- 日经春秋 20160120
- C#-gridview中选择一行时取得该行的第一列字段
- Struts2入门
- cocos studio 2.3.3制作骨骼动画
- Js时间
- Notepad++前端开发常用插件介绍
- 表单重复提及的问题
- [First order method] Gradient descent tools