VS下生成与配置静态库与动态库(二)

来源:互联网 发布:linux proc net dev 编辑:程序博客网 时间:2024/05/22 15:53

前面一篇介绍了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

0 0
原创粉丝点击