静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。
下面就是一个简单地动态链接库生成以及应用:
首先,在(VS2010)新建一个(Win32 Console Application)项目,点击OK;
其次,选择DLL、空项目,再点击finish;
项目建好了,下面就可以在头文件添加一个名字为test.h的头文件,头文件里代码如下:
#ifndef __TEST_H__
#define __TEST_H__
#include <iostream>
_declspec(dllexport) int FunAdd(int x,int y);
#endif
然后在源文件中添加一个名字为test.cpp的源文件,文件里代码如下:
#include "Test.h"
int FunAdd(int x,int y)
{
return x+y;
}
这样代码就写好了,然后要进行代码编译了,在编译之前一定要注意,要将Solution Configurations设置为Release,否则生成的DLL文件在没有装Vs2010的机器上会运行出错。
然后点击build,在工程目录的release文件夹会生成test.lib和test.dll文件,这两个文件要留着备用。
这样,一个动态链接库就建立好了,然后就是使用的时候了。
同样,在(VS2010)新建一个(Win32 Console Application)项目,点击OK;
然后点击
添加一个头文件和一个源文件
#ifndef __DLL_TEST_H__
#define __DLL_TEST_H__
#pragma comment(lib,"test.lib")
_declspec(dllimport) int FunAdd(int x,int y);
#endif
//源文件代码
#include<iostream>
#include "dlltest.h"
using namespace std;
void main()
{
int a=1;
int b=2;
cout<<FunAdd(a,b);
while(1);
}
然后将上面生成的test.lib和test.dll文件复制到该项目目录下;
同样项目配置要选择Release,点击编译,然后到该项目的Release目录下可以找到一个可执行文件,然后将刚才生成的test.dll文件和该.exe放到一起就可以交付给别人使用了,运行结果是3.