C/C++:Windows动态链接库

news2025/1/18 21:10:17

动态链接库(Dynamic Link Library,简称DLL)是在运行时加载的库,它们的代码和数据在内存中与目标程序共享;这意味着多个程序可以共享相同的库实例,并且库的代码可以在不重新编译目标程序的情况下更新。

工作原理
开发人员创建一个或多个动态链接库,其中包含他们想要重用的代码。
在编译目标程序时,链接器会在可执行文件中包含对动态链接库的引用,但不会将库的代码复制到可执行文件中。
在运行时,操作系统的动态链接器(如Windows中的DLL或Linux中的.so文件)会将库加载到内存中,并将其与目标程序共享。
动态链接库优点:
多个程序可以共享相同的库实例,因此不会重复占用内存空间;库的代码可以在不重新编译目标程序的情况下更新。
动态链接库缺点:
程序需要在运行时访问正确版本的库,否则可能会导致运行时错误;与静态链接相比,动态链接可能会增加启动时间和内存占用,因为需要在运行时加载和链接库。

在Windows平台上,DLL可以由多种编程语言编写,包括C、C++、C#等。开发人员可以使用工具如Microsoft Visual Studio等来创建、编译和管理DLL。通常,DLL文件具有.dll的文件扩展名。

DLL生成和使用:

生成DLL:

在 Windows 平台上,创建和使用 DLL(Dynamic Link Library)通常涉及以下步骤:

1.编写源代码: 编写你的 DLL 的源代码,包括需要导出的函数、变量以及其他需要在 DLL 中使用的代码,通常需要源代码+头文件(调用DLL中的代码可以根据头文件进行)。

示例:

①tool.h中的代码:声明一个add函数,可以使用add函数计算两个数相加。

#pragma once
#include<stdio.h>
__declspec(dllexport) int add(int nNumberA, int nNumberB);

②tools.c中的代码:add函数的具体实现

#include "tools.h"
​
__declspec(dllexport) int add(int nNumberA, int nNumberB)
{
    return nNumberA+nNumberB;
}

__declspec(dllexport) 关键字来标记需要在 DLL 中导出的函数和数据的声明;这将告诉编译器要将这些函数和数据导出到 DLL 中。

2.在VS中设置生成DLL文件

右击项目-->选择属性,打开项目属性页;

在项目属性页中设置代码生成类型为动态库(.dll),目标文件名根据自喜设置,目标文件扩展名点击应用后VS会自动修改;

3.生成 DLL 文件: 右击项目--->选择生成;

在输出中获取.dll文件生成的路径;

根据路径打开.dll文件所在的文件夹,会发现除了.dll动态库文件外,VS还生成了一个.lib文件;

这个.lib 文件通常是用于动态链接的导入库(Import Library),而不是静态链接库文件;要注意区分。导入库(Import Library)是用于在编译时指示链接器如何链接 DLL 的文件。它包含了对 DLL 中函数和数据的引用,以便在编译时将它们链接到最终的可执行文件中。

DLL文件的使用

打开需要用到生成的DLL文件的项目的所在文件夹;

将上述.h头文件、.dll动态链接库文件、.lib导入库文件复制到该项目的文件夹中;

接着通过添加现有项将头文件.h导入项目头文件中,将.lib导入库文件导入资源文件中;

导入完成后就可以在项目代码中使用动态连接库文件中的函数或变量等代码了;

#include <stdio.h>
​
int main()
{
    printf("%d", add(5, 5));
}
​

最后的执行结果:

DLL文件使用成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1674407.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么转换音频?看这3款音频转换器

随着数字媒体的发展&#xff0c;音频文件在我们的日常生活中占据了越来越重要的地位。有时候在不同的应用场景里&#xff0c;无论是音乐、语音还是其他类型的音频内容&#xff0c;我们都需要对其进行转换以满足不同的需求。 本文将为您介绍3款常用的音频转换器&#xff0c;帮助…

基于.NetCore和ABP.VNext的项目实战一:abp cli 搭建项目

学习了阿星Plus的博客项目,自己也试着搭建自己的博客。 ABP和ABP.VNext的主要区别在于核心库的精简、对领域驱动设计(DDD)的关注、以及使用的技术栈。 1、ABP VNext的核心库相比ABP更加精简,它将原有许多组件从核心库中抽离成独立的组件,这使得开发者可以更灵活地选择需要…

Github新手入门使用方法

**存在问题&#xff1a;**新手如何快速入门github&#xff0c;能够下载开源文件&#xff0c;并且修改后更新远程github仓库&#xff1b; 解决方案&#xff1a; 参考&#xff1a; http://www.360doc.com/content/24/0301/12/60419_1115656653.shtml https://blog.csdn.net/gongd…

Python环境变量的访问:从入门到精通

环境变量是操作系统中的一种特殊变量&#xff0c;它允许用户在不修改程序的情况下&#xff0c;通过配置文件来改变程序的行为。在Python中&#xff0c;访问环境变量是一个常见的需求&#xff0c;无论是为了读取配置信息、获取系统信息&#xff0c;还是进行程序调试。本文将详细…

荆州科技局副局长乔梁莅临湖北点赋网络科技公司参观调研

近日&#xff0c;荆州科技局副局长乔梁&#xff0c;莅临湖北点赋网络科技公司进行参观调研。点赋科技总经理崔梦娇亲自陪同&#xff0c;向副局长介绍了公司的D咖智能饮品机器人经营状况和研发进展情况。 在参观过程中&#xff0c;副局长乔梁对点赋科技的创新能力和技术成果给予…

商业模式都验证不了,还搞APP,莫非想早死早投胎。

有几个原因可以解释为什么大部分互联网创业者选择先开发小程序而不是直接做App&#xff1a; 低成本和快速开发&#xff1a;相比于开发一个完整的App&#xff0c;开发小程序的成本更低且开发周期更短。小程序可以在现有的移动平台上运行&#xff0c;无需独立的安装和更新&#…

地产人的福音!VR全景分屏对比,让装修施工一目了然

现如今&#xff0c;VR全景已成为地产行业不可或缺的应用工具&#xff0c;从地产直播到楼市VR地图&#xff0c;从效果图到水电家装施工记录&#xff0c;可以说整个地产行业的上下游生态中都可以看到720云VR全景的身影。 以720云VR全景作为直播载体 VR全景高清矩阵地图等多种内容…

干部民主测评:深化管理智慧,凝聚团队力量

在现代化组织管理的广阔舞台上&#xff0c;干部民主测评扮演着举足轻重的角色。它不仅是评价干部工作实绩、能力素质的有力工具&#xff0c;更是推动组织向民主化、科学化、规范化迈进的强大引擎。通过民主测评&#xff0c;我们能够深入洞察每位干部的工作表现、群众基础和领导…

好物分享类视频带货怎么做?萤瓴优选开启爆款视频领取模式!千万不要错过!

好物分享类视频带货&#xff0c;作为当下热门的电商营销方式&#xff0c;正以其独特的魅力和效果吸引着越来越多的 keJ0277 商家和消费者。在这个充满机遇和挑战的时代&#xff0c;如何成功打造一款爆款好物分享视频&#xff0c;成为了众多商家关注的焦点。萤瓴优选&#xff0c…

【js刷题:数据结构链表篇之移除链表元素】

移除链表元素 一、定义链表节点&#xff08;面试时要自己写&#xff09;二、题目三、移除头节点1、直接在原链表中操作移除2、设置一个虚拟头结点在再进行删除操作 四、解题代码 一、定义链表节点&#xff08;面试时要自己写&#xff09; class ListNode {val;next null;cons…

最新VS code配置C/C++环境(tasks.json, launch.json,c_cpp_properties.json)及运行多个文件、配置Cmake

目录 一、VScode配置C/C环境&#xff0c;需设置tasks.json, launch.json文件 二、安装C/C扩展&#xff0c;配置tasks.json、launch.json、c_cpp_properties.json文件 (1)安装c/c扩展 (2)配置tasks.json文件 (3)配置launch.json文件 (4)配置中的参数(属性)说明 (5)运行程序(运行…

JINGWHALE 数字科学艺术创新中心

使命宗旨 JINGWHALE 数字科学艺术创新中心 以人文思想&#xff0c;结合自然科学&#xff0c;知行合一的践行人类数字化共产事业&#xff01;凝聚创造智慧&#xff0c;指导引领创建更美好的物质世界&#xff0c;获得更好的精神体验&#xff01; JINGWHALE 全人类数字共产主义理…

Oracle sqlnet.ora配置文件

一、作用 这里可以看官网解释Parameters for the sqlnet.ora File (oracle.com) 该文件是配置文件配置文件。它驻留在客户端计算机和数据库服务器上。配置文件使用此文件进行存储和实现。可以使用文件中的访问控制参数配置数据库服务器。这些参数根据协议.sqlnet.orasqlnet.o…

59.基于SSM实现的网上花店系统(项目 + 论文)

项目介绍 本站是一个B/S模式系统&#xff0c;网上花店是在MySQL中建立数据表保存信息&#xff0c;运用SSMVue框架和Java语言编写。并按照软件设计开发流程进行设计实现充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得基于SSM的网…

宝兰德成为中国信通院政企信创促进中心成员 共谱信创产业新篇章

近日&#xff0c;中国信通院云计算标准和开源推进委员会2024年第一次全体工作会议圆满结束。会上&#xff0c;宝兰德获得由中国信通院和EDCC政企信息技术应用创新促进中心授予的荣誉证书&#xff0c;成为政企信创促进中心成员单位。 关于政企信创促进中心 中国信通院政企信创促…

langchain_community切分各种文档数据;加载向量模型;使用向量库

参考: https://github.com/langchain-ai/langchain https://api.python.langchain.com/en/latest/community_api_reference.html https://github.com/shibing624/ChatPilot/blob/384f18e4f10f87e10f104f9ff57f02c655588035/chatpilot/apps/rag_app.py 安装: pip instal…

视频号小店怎么做?详细步骤分享,简单易学!

哈喽&#xff0c;大家好&#xff0c;我是醒醒团队的电商花花。 视频号小店电商最近我们应该也听到过不少&#xff0c;这个项目作为一个新平台电商项目&#xff0c;有着很大的流量和市场&#xff0c;值得我们去投资去深入。 而且视频号小店项目我们不用囤货&#xff0c;发货&a…

全球量子计算已开始商业化!应用最多的行业你一定想不到

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨卉可 排版丨沛贤 深度好文&#xff1a;2600字丨5 分钟阅读 01 量子计算是一场高风险的游戏 近日&#xff0c;PsiQuantum从澳大利亚联邦政府和地方政府获得了10亿澳元资金&#xff0c;这…

Kubernetes集群自动化部署

目录 1.1 实验介绍 1.1.1 关于本实验 1.1.2 实验目的 1.2 环境准备 步骤 1 设置节点名 步骤 2 配置 hosts 节点名解析 步骤 3 配置免密登录 步骤 4 清空 iptables、关闭防火墙并禁用 selinux 步骤 5 关闭交换分区 步骤 6 开启 ipvs 步骤 7 设置时间同步 步骤 8 配置…

可重构柔性装配系统,为制造业的未来描绘出一幅崭新的蓝图

随着科技的飞速发展&#xff0c;传统的产线设计模式正面临着前所未有的挑战。在这个变革的时代&#xff0c;可重构柔性装配系统凭借其独特的优势&#xff0c;正引领着智能化生产的新浪潮&#xff0c;为制造业的未来描绘出一幅崭新的蓝图。 传统的产线设计往往固定且僵化&#x…