• 介绍静态链接库和动态链接库的区别,及在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中找到

    要调用的函数。


  • 相关阅读:
    人生顿悟之博观而约取,厚积而薄发
    Android_Dialog介绍
    java算法:分治法
    软件开发高手须掌握的4大SQL精髓语句(综合篇)
    和菜鸟一起学linux总线驱动之smartcard传输协议
    和菜鸟一起学linux总线驱动之smartcard操作模式和协议与参数选择
    祝贺自己CSDN博客上的博文《软件开发高手须掌握的4大SQL精髓语句(一)》浏览量突破1000次
    《Android系统源代码情景分析》一书勘误
    java算法:递归算法
    html网马通用免杀
  • 原文地址:https://www.cnblogs.com/BBOOT/p/3812667.html
Copyright © 2020-2023  润新知