zoukankan      html  css  js  c++  java
  • 源文件(cpp)、静态库(lib)、动态库(dll)

    背景

    一个函数想要调用另一个函数

    1、同个文件

    最简单的办法就是调用的函数和被调用的函数写在同个文件中

    void CalledFunction()  // 被调用的函数
    {
        ...
    }
    
    void CallFunction()    // 调用的函数
    {
        CalledFunction()   // 调用被调用的函数
    }
    

    2、源文件

    把被调用的函数写在另外一个文件

    头文件(被调用函数的声明)源文件(被调用函数的定义)

    // Called.h 头文件
    void CalledFunction(); // 被调用的函数的声明
    
    // Called.cpp 源文件
    void CalledFunction()  // 被调用的函数的定义
    {
        ...
    }
    
    // Call.cpp 调用文件
    #include "Called.h" // 引入头文件
    void CallFunction()    // 调用的函数
    {
        CalledFunction()   // 调用被调用的函数
    }
    

    3、静态库

    把源文件编译成静态文件,隐藏代码细节

    两件套:头文件、静态库

    // Called.h 头文件
    void CalledFunction(); // 被调用的函数的声明
    
    // Called.cpp 源文件 编译成 导入库 Called.lib
    void CalledFunction()  // 被调用的函数的定义
    {
        ...
    }
    
    // Call.cpp 调用文件
    #include "Called.h"    // 引入头文件
    #pragma comment(lib, "Called.lib")   //链接静态库
    void CallFunction()    // 调用的函数
    {
        CalledFunction()   // 调用被调用的函数
    }
    

    4、动态库

    把源文件编译成导入库和动态文件,软件运行时再加载进来

    三件套:头文件、导入库、动态库

    // Called.h 头文件
    #ifdef DLLProvider
    #define DLL_EXPORT_IMPORT __declspec(dllexport) //表示对外导出功能
    #else
    #define DLL_EXPORT_IMPORT __declspec(dllimport) //表示向内导入功能
    #endif
    DLL_EXPORT_IMPORT void CalledFunction(); // 被调用的函数的声明
    
    // Called.cpp 源文件
    // 编译成:导入库Called.lib和动态库Called.dll
    // 导入库比静态库小很多,软件运行的时候,再导入动态库
    #define DLLProvider // 声明对外导出
    #include "Called.h" // 引入头文件
    void CalledFunction()  // 被调用的函数的定义
    {
    ...
    }
    
    // Call.cpp 调用文件
    #include "Called.h"    // 引入头文件
    #pragma comment(lib, "Called.lib")   //链接导入库
    void CallFunction()    // 调用的函数
    {
    CalledFunction()   // 调用被调用的函
    }
    

    静态库&动态库&导入库参考资料

    https://www.cnblogs.com/kirito1/p/12291060.html

  • 相关阅读:
    react使用 UEditor富文本编辑器
    ES6、ES7的新特性、基本使用以及 async/await的基本使用
    react 生命周期
    webpack 新创项目
    TMultipartFormData上传文件
    ffmpeg水印处理
    ffmpeg通过rtsp对摄像头摄像头抓图
    ffmpeg命令行截图
    ffmpeg保存为jpg文件
    ffmpeg打开视频文件
  • 原文地址:https://www.cnblogs.com/wwgk/p/14315047.html
Copyright © 2011-2022 走看看