zoukankan      html  css  js  c++  java
  • 介绍静态链接库和动态链接库的差别,及在VC++6.0中的建立和使用

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

    LIB是静态链接库,在程序编译连接的时候是静态链接,其相应的文件格式是.lib。

    即当程序採用静态链接库的时候。.lib文件里的函数被链接到终于的可运行文件里。由于应用程序所需的所有内容都是从库中复制了出来。所以静态库本身并不须要与可运行文件一起发行。

    DLL是动态链接库,在程序运行的时候被调用,其相应的文件的格式是.dll。

    即当程序採用动态链接的时候。.dll文件里的函数并没有被链接到可运行文件里。可运行文件仅仅是保存了函数的地址信息。可是动态库必须和应用程序一起公布。

    以下解说一下动态库和静态库在VC6.0中的用法

    先来解说静态库的创建和用法

    首先建立一个Win32 Console Static Libraryproject名字为Max_Func。

    在project中加入名字为Max_Func.h的头文件。

    代码例如以下:

    int max(int a,int b);

    在project中加入名字为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;
    }

    在project中加入头文件Macro_Define.h

    代码例如以下:

    #define COPYRIGHT "Scripted by WP."

    在project中加入头文件Global_Value.h

    代码例如以下:

    int GLOBAL_NUM = 0;

    在project中加入头文件Extern_Value.h

    代码例如以下:

    extern int GLOBAL_NUM;

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

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

    如何加入到project中呢?以下介绍几种方法。并用某一种方法展示一下.


    第一种加入方法是#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文件加入到要使用的project中。

    即在project上选择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;
    }

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


    有什么不明确的能够在以下留言。


    以下解说动态库的创建和用法

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

    在project中加入名字为Max_Func.h的头文件。

    代码例如以下:

    int max(int a,int b);

    在project中加入名字为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;
    }

    在project中加入头文件Macro_Define.h

    代码例如以下:

    #define COPYRIGHT "Scripted by WP."

    在project中加入头文件Global_Value.h

    代码例如以下:

    int GLOBAL_NUM = 0;

    在project中加入头文件Extern_Value.h

    代码例如以下:

    extern int GLOBAL_NUM;

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

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

    须要建立Max_Func.def增加project

    内容例如以下:

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

    EXPORTS  max //导出的函数

    DLL文件的增加方式和LIB的差点儿一样,由于都是将格式为lib的文件增加到project。须要注意的是须要将DLL文件增加到project文件夹下或者可以搜索到的地方。在程序的执行过程将dll文件里的函数进行调用。project通过函数的地址在dll中找到

    要调用的函数。


  • 相关阅读:
    Google服务
    Duwamish深入剖析配置篇
    Duwamish Online SQL XML 分类浏览
    数据库操作类
    搜索引擎Google的小秘密
    微软.NET经典架构例程Duwamish 7.0分析
    一个ASP.NET中使用的MessageBox类
    轻松解决页面回传后页面滚动到顶端
    Duwamish 7 初探——数据流程
    使用ADO.NET的最佳实践
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7039240.html
Copyright © 2011-2022 走看看