C++基础学习之8 - 玩转DLL

本文深入探讨了编程中代码复用的重要方式——DLL和LIB的使用方法。解释了静态库LIB的功能及其在Windows平台上的实现形式,并详细介绍了动态链接库DLL的工作原理及两种链接方式:隐式链接与显式链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在编程中,一个关键的问题就是 代码或模块复用,对于 模块复用 来说,LIB 和 DLL是最好的复用方式

        先来说静态库LIB,LIB库有两种可能:

1. 在 Windows下是静态库(对应Linux下的 .a 文件);

2. 对应 DLL 的入口或说明文件;

        再来说 DLL,动态链接库(dynamic link library),是程序运行时用到的。

        一个标准程序的生成过程:

a)通过头文件 .h来进行编译调用;

b)通过 .lib 来进行链接(Link);

c)想要使动态链接的程序运行起来,需要加载 DLL。

        C++提供两种 DLL 链接方式,隐式链接 和 显式链接。

一. 隐式链接

        所谓隐式链接是指 并不指定 DLL 的存在,而是通过 头文件和 LIB 库来进行编译,隐式的索引到 对应的 DLL符号。

        来看一个例子:

#include "Test.h"
#pragma comment(lib, "Test.lib")    // 链接

int main()
{
    int result = Test_Add(1,2);   // DLL中的函数,在.h中声明
    return(0);
}

二. 显式链接

       直接通过函数指针和WIN32 API函数LoadLibrary、GetProcAddress进行装载,不需要.lib文件和.h头文件,只需要.dll文件即可。       显式调用提供了一种简洁的方法,或者是在头文件和lib文件丢失情况下的一种解决方案。

#include "windows.h"
typedef void (*TEST_FUNC_ADD)(int,int);

int main()
{
    DLLFunc Test_Add;
    HINSTANCE hInstLibrary = LoadLibrary("Test.dll"); // 动态加载DLL

    if(!hInstLibrary)
    {
        Test_Add = (DLLFunc)GetProcAddress(hInstLibrary, "Test_Add");
        int result = Test_Add(1,2);
        FreeLibrary(hInstLibrary);
    }
    return(0);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值