动态库和静态库

简介:  1.静态库不需要main函数,要想生成lib,要修改属性à常规à配置类型à改成dll 2.静态库中的头文件只是说明,是给程序员看的,其实lib里面已经有了接口。 3.链接lib的时候程序的体积就变大了。 4.静态库更新的时候,需要重新生成,然后调用 5.动态库调用就不用重新生成。 6.动态库的调用代码:(使用的是HMODULELoadLibrary


1.静态库不需要main函数,要想生成lib,要修改属性à常规à配置类型à改成dll

2.静态库中的头文件只是说明,是给程序员看的,其实lib里面已经有了接口。

3.链接lib的时候程序的体积就变大了。

4.静态库更新的时候,需要重新生成,然后调用

5.动态库调用就不用重新生成。

6.动态库的调用代码:(使用的是HMODULELoadLibraryA的方式进行调用)

接口

7.编写的动态库如下:

#include<stdio.h>

#include<stdlib.h>

#include<Windows.h>

 

//导出函数,可以加载的时候调用

_declspec(dllexport) void msg()

{

    MessageBoxA(0, "1", "2", 0);

}

 

//导出函数,可以加载的时候调用

_declspec(dllexport) int  add(int a, int b)

{

    return a + b;

}

 

8.动态库调用代码:

#include <stdio.h>

#include<stdlib.h>

#include<Windows.h>

 

typedef void(*pmsg)();//简化函数指针

typedef int(*padd)(int a, int b);//简化函数指针

 

void main()

{

    HMODULE mydll = LoadLibraryA("动态库.dll");

    if (mydll == NULL)

    {

        printf("动态库加载失败");

    }

    else

    {

        pmsg pmsg1;   //定义一个函数指针,msg为函数名

        //获取函数地址

        pmsg1 = (pmsg)GetProcAddress(mydll,"msg");

        if (pmsg1 != NULL)

        {

            pmsg1();//执行

        }

        padd padd1;//定义函数指针

        padd1 = (padd)GetProcAddress(mydll, "add");

        if (padd1 != NULL)

        {

            printf("\n%d",padd1(10,29));

        }

    }

    //如果调用下面的代码之后就可以发现在程序里面没有"动态库.dll"

    FreeLibrary(mydll);

 

    system("pause");

}

 

9.动态库和静态库的比较

dll(动态库)

   谁都可以用,不用更新exe,更新dll即可,可以实现功能更新,节省计算机资源,需要使用的时候调用,否则释放。

lib(静态库)

   可以实现库文件的私有,每次更新,需要重新编译exe.

 

 

 

 

目录
相关文章
|
7月前
|
人工智能 编解码 芯片
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
不会向ai提问,不知道怎么提问的 可以看看
20693 1
告别低效沟通|让技术提问不再头疼-这套高效AI提问模板来帮你
|
安全 Linux
Linux内核OverlayFS子系统权限提升漏洞(CVE-2023-0386)
Linux内核OverlayFS子系统权限提升漏洞,在Linux内核的 OverlayFS子系统中,当用户将一个具有权限的文件从一个nosuid挂载点复制到另一个挂载点时,未经授权的攻击者可以执行setuid文件,导致权限提升。
422 1
|
2月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
228 89
|
2月前
|
人工智能 SEO
智能体最新消息:从技术爆点到产业浪潮,三大趋势透视下一代人机协作范式
2024年AI智能体爆发,正重塑商业与职业格局。三大趋势凸显:智能体从工具升为战略核心,驱动企业模式创新;能力平民化催生“智能体操盘手”新职业;政策与资本共推教育生态成型。智能体已成工作新常态,时代变革亟待主动拥抱。
|
SQL 存储 分布式计算
ODPS跨集群迁移与数据同步经验分享
集团业务的迅猛发展带来数据量的激增,存储容量告急,迫切需要将生产集群PA上的大量数据迁移到其它集群。如何安全地跨集群迁移几十PB的数据和其上相关业务,是我们面临的第一个挑战。数据迁移之后,两个集群间存在大量的数据依赖,需要互相访问最新的数据,如何安全快速地实现跨集群数据同步,这是紧跟其后的第二个挑战
4336 0
|
4月前
|
机器学习/深度学习 人工智能 监控
AI 视频监控技术核心解析:三大底层能力支撑智能化升级
AI视频监控突破传统安防局限,依托三大核心技术:从“被动感知”到“主动理解”,实现精准场景识别;从“孤立运行”到“深度协同”,构建业务联动闭环;从“高门槛应用”到“普惠化落地”,降低部署成本与使用门槛。技术融合场景定制、智能决策与轻量化架构,推动安防向高效、智能、普及化方向升级。
987 0
|
传感器 存储 安全
物联网技术
物联网(Internet of Things,IoT)是指通过感知设备、网络传输、数据处理等技术手段,实现物与物、人与物之间的互联互通和智能化管理的网络
1573 48
|
JavaScript
VUE——使用easy-typer-js实现打字机效果
VUE——使用easy-typer-js实现打字机效果
244 0
|
存储 机器学习/深度学习 人工智能
ChatGPT盛行的当下,向量数据库为大模型配备了一个超级大脑
ChatGPT盛行的当下,向量数据库为大模型配备了一个超级大脑
701 0
|
Ubuntu 关系型数据库 Unix
从小白到专家 PG 技术大讲堂 - Part 1:PG 简介
从小白到专家 PG 技术大讲堂 - Part 1:PG 简介
638 2