用C++创建属于自己的类库?
2016-01-20 12:58
357 查看
使用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分钟的事。
目的: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分钟的事。
相关文章推荐
- 脑上用VS2010编写的VC++程序(使用MFC库
- AndroidStudio 编译C/C++文件生成SO文件
- C#调用C++dll文件 运行提示找不到函数的入口点
- C++封装、继承、多态
- C++函数重定义、重载、重写
- VS2015 C#调试C++ dll时提示:“当前不会命中断点,因为还没有为该文档加载任何符号”解决方法From Eric Qu
- c++中struct使用注意事项
- <设计模式>系列汇总 By python and C++
- C语言实现龙贝格求积
- OJ上 G++ 与 C++ 的区别
- c++调用fortran程序中遇到的问题
- C语言再学习之数据类型
- C++中内存分配详解
- 1010. Radix (25)
- C++ std::pair<>
- 重学C++ (六) 标准IO库
- c语言中的static
- c++程序猿经典面试题
- c++中的243、251、250错误原因
- C++设计模式——单例模式