zoukankan      html  css  js  c++  java
  • C89:论静态链接库和动态链接库

    一.静态链接库

    想要生成静态链接库,只需要生成的.lib库文件和该静态链接库的.h头文件即可

    .h是用来声明所需要的函数名称参数等

    .lib静态库文件包含了源文件

    1.

    首先打开VS,新建Win32控制台应用程序,应用程序类型选择静态库,然后新建了静态链接库项目

    2.

    在源文件文件夹里面添加StaticLib.cpp源文件    在头文件文件夹里面添加StaticLib.h头文件


    3.

    //StaticLib.cpp
    double Add(double a,double b){
    	return a+b;
    }
    
    //StaticLib.h
     
    #pragma once 
     
    extern double Add(double a,double b)
    

    4.

    生成该项目的解决方案得到.lib静态链接库

    5.

    新建另一个Win32项目或者Win32控制台来使用静态链接库

    6.

    使用静态链接库

    //Mian.cpp
     
    //使用静态链接库的头文件
    #include "StaticLib.h"
     
    //使用静态链接库的库文件
    #pragma comment(lib,"StaticLib.lib");
     
    int main(){
     
        double a=Add(1.0,2.0);
        ...
    }
    

    二.动态链接库

    动态链接库分为隐式链接和显式链接,并且DllMain这个函数并不是必需的,它可以用来初始化DLL,有点类似构造函数和析构函数

    (1).隐式链接

    动态链接库的隐式链接其实和静态链接库有点像

    想要生成动态链接库的隐式链接,只需要生成的.lib库文件和该动态链接库的.h头文件即可

    1.

    首先打开VS,新建Win32控制台应用程序,应用程序类型选择动态库,然后新建了动态链接库项目

    2.

    在源文件文件夹里面添加DynamicLib.cpp源文件 

    在头文件文件夹里面添加DynamicLib.h头文件

    3.
    //DynamicLib.h
     
    #pragma once
     
    extern "C" __declspec(dllexport) int Add(int x,int y);  //注意declspec前是两个下划线
    
    //DynamicLib.cpp
     
    #include "DynamicLib.h"
     
    //DLL入口函数,可写可不写
    /*
    BOOL APIENTRY DllMain(HMODULE hModule,
                          DWORD ul_reason_for_call,
                          LPVOID lpReserved)
    {
        switch(ul_reason_for_call){
            
            case DLL_PROCESS_ATTACH:
                break;
            case DLL_THREAD_ATTACH:
                break;
            case DLL_THREAD_DETACH:
                break;
            case DLL_PROCESS_DETACH:
                break;
     
        }
           return TRUE;
    }
    */
     
    int Add(int x,int y){
        return x+y;
    }
    
    4.

    生成该项目的解决方案得到.lib动态链接库

    5.

    新建另一个Win32项目或者Win32控制台来使用动态链接库的隐式链接

    6.

    使用动态链接库的隐式链接

    //Mian.cpp
     
    //使用动态链接库的头文件
    #include "DynamicLib.h"
     
    //使用静态链接库的库文件
    #pragma comment(lib,"DynamicLib.lib");
     
    int main(){
     
        int a=Add(1,2);
        ...
    }
    

    (2).显式链接

  • 相关阅读:
    深度学习模型参数计算
    keras多输出多输出示例(keras教程一)
    keras可视化报错:OSError: `pydot` failed to call GraphViz.Please install GraphViz问题解决
    git版本管理,git tag
    python封装自己的模块,pip install安装到python环境
    如何理解Virtual DOM
    使用 Hbuilder 连接手机调试移动端项目
    js 常用排序
    博客漂浮的小人
    开发者必备Linux命令
  • 原文地址:https://www.cnblogs.com/k5bg/p/11136761.html
Copyright © 2011-2022 走看看