介绍静态链接库和动态链接库的区别,及在VC++6.0中的建立和使用

首先介绍一下链接库:链接库分为动态链接库和静态链接库两种

LIB是静态链接库,在程序编译连接的时候是静态链接,其对应的文件格式是.lib。即当程序采用静态链接库的时候,.lib文件中的函数被链接到最终的可执行文件中,因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。

DLL是动态链接库,在程序运行的时候被调用,其对应的文件的格式是.dll。即当程序采用动态链接的时候,.dll文件中的函数并没有被链接到可执行文件中,可执行文件只是保存了函数的地址信息。但是动态库必须和应用程序一起发布。

下面讲解一下动态库和静态库在VC6.0中的使用方法

先来讲解静态库的创建和使用方法

首先建立一个Win32 Console Static Library工程名字为Max_Func。

在工程中添加名字为Max_Func.h的头文件。

代码如下:

int max(int a,int b);

在工程中添加名字为Max_Func.cpp的源文件。

代码如下:

#include <iostream.h>
#include "Max_Func.h" //声明定义max函数
#include "Macro_Define.h"//下面的三个头文件随后定义
#include "Global_Value.h"
#include "Extern_Value.h"

int max(int a,int b)
{
cout<<"COPYRIGHT"<<endl;
++GLOBAL_NUM;
cout<<"Call Max_Func "<<GLOBAL_NUM<<endl;
return a>b?a:b;
}

在工程中添加头文件Macro_Define.h

代码如下:

#define COPYRIGHT "Scripted by WP."

在工程中添加头文件Global_Value.h

代码如下:

int GLOBAL_NUM = 0;

在工程中添加头文件Extern_Value.h

代码如下:

extern int GLOBAL_NUM;

编译上述的工程文件得到Max_Func.lib文件。

对外开发的文件为Max_Func.lib和Max_Func.h.如果是项目合作开发的话Macro_Define.h,Global_Value.h,Extern_Value.h文件是共有的。

怎样添加到工程中呢?下面介绍几种方法。并用某一种方法展示一下.


第一种添加方法是#pragma comment(lib,"D:\\MFC\\Test_Project_4\\lib\\Max_Func.lib")来添加。

其中"D:\\MFC\\Test_Project_4\\lib\\Max_Func.lib"为Max_Func.lib文件的绝对路径。当然也可以用相对路径。

然后在你使用.lib中函数的文件中添加#include "Macro_Define.h"即可。


第二种方法是直接将Max_Func.lib文件添加到要使用的工程中。即在工程上选择Add Files to Project.....来完成。

然后在你使用.lib中函数的文件中添加#include "Macro_Define.h"即可。


第三种方法是VC6.0中的Tools/Options的Library Files 添加.lib文件的查找路径。并且在Project/Setting的Link标签的

object/library modules 中添加静态库的名字。

然后在你使用.lib中函数的文件中添加#include "Macro_Define.h"即可。


下面的程序利用的是第一种方法

#include <iostream.h>
#include "Macro_Define.h"
#include "Extern_Value.h"
#include "Max_Func.h"
#pragma comment(lib,"D:\\MFC\\Test_Project_4\\lib\\Max_Func.lib")//加入静态库
void main(void)
{
cout<<COPYRIGHT<<endl;
cout<<max(19,49)<<endl;
cout<<max(200,100)<<endl;
}

上面的过程即可调用静态库中的函数了。


有什么不明白的可以在下面留言。


下面讲解动态库的创建和使用方法

创建一个动态链接库的工程名字为Max_Func

在工程中添加名字为Max_Func.h的头文件。

代码如下:

int max(int a,int b);

在工程中添加名字为Max_Func.cpp的源文件。

代码如下:

#include <iostream.h>
#include "Max_Func.h" //声明定义max函数
#include "Macro_Define.h"//下面的三个头文件随后定义
#include "Global_Value.h"
#include "Extern_Value.h"

int max(int a,int b)
{
cout<<"COPYRIGHT"<<endl;
++GLOBAL_NUM;
cout<<"Call Max_Func "<<GLOBAL_NUM<<endl;
return a>b?a:b;
}

在工程中添加头文件Macro_Define.h

代码如下:

#define COPYRIGHT "Scripted by WP."

在工程中添加头文件Global_Value.h

代码如下:

int GLOBAL_NUM = 0;

在工程中添加头文件Extern_Value.h

代码如下:

extern int GLOBAL_NUM;

上述的代码编译生成文件Max_Func.dll

下面还需要生成一个导出DLL的文件的Max_Func.lib文件。

需要建立Max_Func.def加入工程

内容如下:

LIBRARY Max_Func_1//说明要导出的动态库名字

EXPORTS  max //导出的函数

DLL文件的加入方式和LIB的几乎一样,因为都是将格式为lib的文件加入到工程。需要注意的是需要将DLL文件加入到工程目录下或者能够搜索到的地方。在程序的运行过程将dll文件中的函数进行调用。工程通过函数的地址在dll中找到

要调用的函数。


posted @ 2014-06-20 12:30  BBOOT  阅读(420)  评论(0编辑  收藏  举报