lib(英文全称:library)分为两种:
- 静态库:这种lib中有函数的实现代码,一般用在静态链接上,它是将lib中的代码加入目标模块(exe或者dll)文件中,所以链接好了之后,lib文件就没有用了。
- 一种LIB是和DLL配合使用的,包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。这种LIB是用在静态调用DLL上的,所以起的作用也是链接作用,链接完成了,LIB也没用了。至于动态调用DLL的话,根本用不上LIB文件。 目标模块(EXE或者DLL)文件生成之后,就用不着LIB文件了。
测试环境:VS2013 Visual C++
MakeDll:
1、新建项目->Win32项目(项目名称为MakeDll)->应用程序类型:DLL->完成
2、添加源文件MakeDll.cpp和头文件MakeDll.h
MakeDll.cpp
// MakeDll.cpp : 定义 DLL 应用程序的导出函数。
//
#include "stdafx.h"
#include "MakeDll.h"
DLL_API int add(int a, int b)
{
return a + b;
}
Point::Point()
{
x = 0.0f;
y = 0.0f;
}
void Point::SetPoint(float x, float y)
{
this->x = x;
this->y = y;
}
void Point::DisPlay()
{
cout << "x= " << x << endl;
cout << "y= " << y << endl;
}
MakeDll.h
#define DLL_API __declspec(dllexport)
#include<iostream>
using namespace std;
DLL_API int add(int a, int b);
class DLL_API Point
{
private:
float x, y;
public:
Point();
void SetPoint(float a, float b);
void DisPlay();
};
3、编译生成,在工程目录下就会生成Debug的目录,在Debug目录下生成我们所需要的dll和lib库
至此,我们已经完成了dll的制作。
UseDll:
使用Dll时,我们需要在制作dll时生成的MakeDll.dll和MakeDll.lib,以及MakeDll.h
1、新建项目->空项目(项目名称:UseDll)
2、在工程目录下新建include目录和lib目录,分别将MakeDll.h和MakeDll.lib拷贝至这两个目录下。
3、配置工程属性如下:
配置属性-> C/C++ -> 常规 :附加包含目录:.\include
配置属性->链接器 -> 常规 :附加库目录:.\lib
4、添加源文件main.cpp。
main.cpp
#include <iostream>
#include "MakeDll.h"
//#define DLL_API __declspec(dllimport) //可注释
#pragma comment(lib,"MakeDll.lib")
using namespace std;
int main()
{
Point p1, p2;
p2.SetPoint(5.6f, 7.8f);
p1.DisPlay();
p2.DisPlay();
cout << "5+6 = " << add(5, 6) << endl;
system("pause");
return 0;
}
参考博文:
例程下载: