winform 动态调用dll_动手 | 奶奶级的动态库入门

这篇博客介绍了动态链接库(DLL)的基础知识,包括静态链接库和动态链接库的区别,以及如何在C++中创建和使用它们。作者通过实例详细讲解了如何创建DLL项目,向DLL添加文件,编译动态库,以及如何在客户端应用中隐式和显式调用DLL函数。最后,博客提供了实际操作演练,帮助读者掌握DLL的使用技巧。
摘要由CSDN通过智能技术生成
  • 程序编译过程
  • 库文件
  • 静态链接和动态链接的区别?
  • 从0开始 - 创建和使用静态链接库
  • 创建静态库项目
  • 向静态库中添加文件
  • 编译静态库
  • 创建引用静态库的C++控制台应用
  • 在应用中使用静态库功能
  • 从0开始 - 创建和使用 DLL
  • 创建 DLL 项目
  • 向 DLL 中添加文件
  • 编译动态库
  • 创造使用 DLL 的客户端应用
  • 隐式调用
  • 显式调用
  • 演练
  • 创建 DLL 项目
  • 向 DLL 中添加文件
  • 创建使用 DLL 的客户端应用
  • 将 DLL 标头添加到包含路径
  • 将 DLL 导入库添加到项目中

(这个目录来的,别点了,还是这页)

笔记不写容易忘,谁脑袋记得住这么多东西(秃)。

事情是这样的,上学期老师给的一个阅读代码的任务,但由于我常年身处文化沙漠死活读不懂。一学期过去了,懒癌终于拿起花瓶浇自己了。

今天的笔记内容说的是平时经常能看见的,运行 VS 项目的时候老在下方加载的 .dll 。包括一小部分的理论和超大部分的实操。


什么是动态链接库(DLL)?

解构一下,”动态“、”链接“、”库“。

  • 动态:与静态相对,对比理解。
  • 链接:程序编译过程的一步。
  • 库:一种代码仓库。

程序编译过程

  • 编译:把文本形式的源代码翻译成机器语言,并形成目标文件。
    • 预处理:处理 # 开头的的指令。(.cpp .i)
    • 编译优化:确定指令是否符合规则,之后翻译成汇编代码。(.i .s)
    • 汇编:把汇编语言翻译成目标机器指令,生成目标文件。(.s .o)

链接:把目标文件、操作系统的启动代码和库文件组织起来形成可执行程序。(.o .exe )

库文件

可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接拿来用的变量、函数或类。

库文件分为静态库和动态库。

静态链接和动态链接的区别?

预编译 -> 编译 -> 汇编 -> ==链接==

区别在于链接阶段如何处理库。

静态库(.lib):链接阶段将汇编生成的目标文件.o和引用的库一起链接打包到可执行文件.exe 中。

特点:移植方便、浪费空间和资源。

动态库(.dll):程序运行时载入。不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例。

特点:资源共享、模块化、简化部署和安装。


C++ 操作实例

  • Windows10、x64
  • VS2019、C++ 的桌面开发

接下来介绍如何创建和使用动态链接库:

  • 创建和使用静态链接库
  • 创建和使用动态链接库
    • 隐式调用
    • 显式调用
      • C语言模块
      • 模块定义文件

为了便于学习,简化理解,先 从0开始 创建静态库和动态库,然后使用应用程序来链接库。最后通过演练应用来实操 DLL 。

接下来的实例可以分解为以下任务:

  • 创建 DLL 项目。
    • 声明和实现函数,导出函数到项目。
  • 创建控制台应用项目。
    • 从 DLL 导入函数。
  • 运行应用。

从0开始 - 创建和使用静态链接库

使用静态库是重用代码的一种绝佳方式。

不必在每个应用中重新实现同一例程,只需将其写入静态数据库一次,然后引用它们即可。 从静态库链接的代码成为了应用的一部分,这样就不必安装另一个文件来使用代码。

接下来从空项目开始创建静态库。

创建静态库项目

将“语言” 设置为“C++” ,将“平台” 设置为“Windows” ,并将“项目类型” 设置为“库”。选择“Windows 桌面向导”。

82d7bf52e107f6dbe5898ec569e95417.png

静态库、空项目。

38a51004168c0ba58b23bb4a6bf73b2b.png

向静态库中添加文件

新建头文件、源文件。

0d8c304fd11ce3265c46e0a67a0a3d4a.png

testlib.h 中添加声明:

#ifndef TESTLIB_H
    #define TESTLIB_H
    // 防止头文件重复包含
    // 条件编译指令

    // 加减乘除
    int add(int a, int b);  // 声明

#else
    int a = 0;
    // 满足条件才会编译,所以这里代码没有被高亮。

#endif

testlib.cpp 中实现功能:

#include "testlib.h"

// 加法
int add(int a, int b)  // 实现
{
    
    return a + b;
}

编译静态库

在菜单栏上依次选择“生成” > “生成解决方案” ,将创建一个可供其他程序使用的静态库 testLib.lib

7bf166137b970eeb2d3d98735b99beae.png

查看项目路径可以找到。

974eec753d586b7c4c46b1d7ab3f9603.png

注:.lib 文件不能独立运行。

至此,静态库已经创建完毕!

创建引用静态库的C++控制台应用

在“解决方案资源管理器”中,右键单击顶部节点“解决方案”,打开快捷菜单 。 选择“添加” > “新建项目”,打开“添加新项目”对话框 。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值