前面一篇介绍了VS下静态库的编译和使用,这一篇将介绍动态库的生成和使用方法。
生成动态库:
1.新建一个Win32控制台项目,去掉预编译文件头,工程命名为“test”;
2.添加用于构建动态库的代码段,放在“test_exports.h”中
- #pragma once;
- #ifndef TEST_EXPORTS_H_
- #define TEST_EXPORTS_H_
-
- #ifdef TEST_API_EXPORTS
- #define TEST_EXPORTS __declspec(dllexport)
- #else
- #define TEST_EXPORTS __declspec(dllimport)
- #endif
- #endif //#ifndef TMESH_EXPORTS_H_
简单说明一下上面的宏定义:
如果定义了宏 TEST_API_EXPORTS,则将TEST_EXPORTS定义为__declspec(dllexport);
否则,将TEST_EXPORTS定义为__declspec(dllimport);
__declspec和dllexport、dllimport为C++保留字段,用于区别此时程序是在生成动态库(dllexport)还是在被其他程序调用动态库(dllimport).
3.配置项目的输出为动态库
属性-》配置属性-》常规-》配置类型,选择动态库,类似静态库的设置,可以设置输出目录,输出文件名
4.设置动态库的.lib文件文件名(这里需要自己写出完整的文件名)
5.添加TEST_API_EXPORTS的定义:
6.规定需要输出到动态库中的变量、函数和类
在需要输出到动态库的地方添加头文件“test_exports.h”,具体的:
- class TEST_EXPORTS MyClass
- {
- }; // 类
- TEST_EXPORTS int myVar; // 变量
- TEST_EXPORTS void myFun(){}// 函数
示例:
头文件
- #ifndef ADD_H
- #define ADD_H
- #include "test_exports.h"
-
- class TEST_EXPORTS CAdd
- {
- public:
- CAdd ();
- ~CAdd();
- int add(int a, int b);
- int m_pData;
- };
-
- #endif
源文件:
- #include "test_add.h"
-
- CAdd::CAdd()
- {
-
- }
-
- CAdd::~CAdd()
- {
-
- }
-
- int CAdd::add(int a, int b)
- {
- m_pData = a+b;
- return a+b;
- }
单独的源文件,以及用于函数声明的头文件:
“func.h”
- extern int add_extern(int a,int b);
"func.cpp"
- #include "test_exports.h"
- TEST_EXPORTS int add_extern(int a,int b)
- {
- return a+b;
- }
点生成项目,在你的输出目录下将看到两个文件:
使用动态库:
头文件和lib文件的配置,与静态库一致;
在使用动态库的程序的.exe所在的目录下,添加.dll文件
注:输出到动态库的对象中,不能包含模板类,如 vector<int> m_array
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。