超级好用的C++实用库之动态库加载器

概述

        在C++中,动态库也称为共享库或DLL,是一种可执行文件形式,其中包含可以被多个应用程序同时加载并使用的函数和数据。相较于静态库,动态库在运行时而不是编译链接阶段被程序所使用。加载动态库,在Windows和Linux操作系统下使用的API函数有所不同。

        Windows操作系统下,动态库的扩展名通常为.dll(Dynamic Link Library),可以使用LoadLibrary、GetProcAddress和FreeLibrary等函数来操作。

        Linux操作系统下,动态库的扩展名通常为.so(shared object)。使用dlopen、dlsym和dlclose等函数来加载、查找符号以及卸载动态库。

CHP_DynLoader类

        为了对应用层屏蔽Windows和Linux操作系统的差异,我们封装了CHP_DynLoader类,以提供统一的接口,便于上层进行调用。CHP_DynLoader类的头文件,可参考下面的示例代码。

#pragma onceclass CHP_DynLoader
{
public:CHP_DynLoader();~CHP_DynLoader();int Open(const char *pszFileName);void *GetFunc(const char *pszFuncName);void Close();private:typedef void *HDynLoader;HDynLoader m_hLoader;
};

        可以看到,CHP_DynLoader类比较简单,只有如下三个公共接口。

        Open:打开指定的动态库。参数pszFileName为动态库的文件名,返回值为0表示成功,否则为错误码。

        GetFunc:获取指定名称的函数指针。参数pszFuncName为函数名称,返回值为函数指针,非NULL表示成功,否则失败。返回的void *可以转换为需要的函数指针形式。

        Close:关闭动态库。关闭后,可重新调用Open函数打开另一个动态库。

总结

        使用动态库具有如下几个优点。

        资源共享:多个进程可以共享同一份库的副本,从而节省内存空间。

        升级便捷:只需替换库文件即可更新所有依赖该库的应用程序功能,无需重新编译链接。

        模块化:有利于软件架构的模块化设计和部署。

        当然,使用动态库也有自身的一些缺点,主要有如下两点。

        依赖问题:程序运行时,必须能找到对应的动态库文件。否则,会因找不到库而导致运行失败。

        性能开销:首次加载库会有一定的性能损耗,包括查找、加载以及解决符号依赖等。

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

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

相关文章

OpenAI神秘模型,再次被Sam Altman提及

5月6日,OpenAI首席执行官Sam Altman在社交平台分享了一条推文“我是一个优秀的GPT-2聊天机器人”。 而在4月30日,Altman就提起过该模型非常喜欢GPT-2。按道理说一个只有15亿参数在2019年发布的开源模型,被反复提及两次就很不寻常。 更意外的…

Yarn 的安装和使用指南

Yarn 的安装和使用指南 Yarn 是一个快速、可靠、安全的 JavaScript 依赖管理工具,它可以帮助开发人员更高效地管理项目的依赖关系。本文将介绍如何安装 Yarn 并展示一些常用的 Yarn 命令和用法。 安装 Yarn 使用 npm 安装 Yarn 在安装 Yarn 之前,首先…

volatile原理

文章目录 如何保证可见性如何保证有序性double-checked locking 问题double-checked locking 解决 volatile 的底层实现原理是内存屏障,Memory Barrier(Memory Fence) 对 volatile 变量的写指令后会加入写屏障对 volatile 变量的读指令前会加…

正则表达式_字符匹配/可选字符集

正则表达式(Regular Expression)也叫匹配模式(Pattern),用来检验字符串是否满足特 定规则,或从字符串中捕获满足特定规则的子串。 字符匹配 最简单的正则表达式由“普通字符”和“通配符”组成。比如“Room\d\d\d”就这样 的正则…

短网址短链接哪个好用?2024年最好的缩短链接短网址推荐

短网址,又称短链接,英文名为Short URL,是一种形式上比较短的网址,使用跳转到方式代替长网址链接,形式美观,而且更容易分享。最出名的短网址服务有国外的bit.ly和谷歌goo.gl,以及国内的百度短网址…

thinkphp5.1 新建模块

thinkphp5.1 新建模块 在ThinkPHP5.1中,创建一个新模块的步骤如下:使用命令行工具创建模块目录结构。 在模块目录中创建相应的文件和目录。 以下是具体的操作步骤和示例代码: 1. 使用命令行工具进入到项目的根目录下,执行以下…

AI+客服行业落地应用

一、客服行业变迁 1.传统客服时代 (1)客服工作重复性高,技术含量低 (2)呼出效率低,客服水平参差不齐 (3)管理难度高,情绪不稳定 (4)服务质量…

《视觉十四讲》例程运行记录(1)—— 课本源码下载和3rdparty文件夹是空的解决办法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、第二版十四讲课本源码下载1. 安装git工具 二、Pangolin下载和安装1. 源码下载2. Pangolin的安装(1) 安装依赖项(2) 源码编译安装(2) 测试是否安装成功 二、…

4:分配器测试

文章目录 分配器作用容器中默认的分配器分配器测试程序这节课并没有总结各种分配器的使用结果 分配器作用 负责分配和管理容器的空间的 不需要用户手动创建 容器中默认的分配器 第二个参数表示默认的分配器 每一个容器初始化的时候 带一个默认的分配器 分配器测试程序 右边的…

商城数据库88张表结构完整示意图61~70(十四)

六十一: 六十二: 六十三: 六十四: 六十五: 六十六: 六十七: 六十八: 六十九: 七十:

深度学习之基于YOLOv5的山羊行为识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习之基于YOLOv5的山羊行为识别系统是一个创新的项目,旨在通过深度学习和目标检测技术&#xff0c…

【数据结构(邓俊辉)学习笔记】列表04——排序器

文章目录 0. 统一入口1. 选择排序1.1 构思1.2 实例1.3 实现1.4 复杂度 2. 插入排序2.1 构思2.2 实例2.3 实现2.4 复杂度分析2.5 性能分析 3. 归并排序3.1 二路归并算法3.1.1 二路归并算法原理3.1.2 二路归并算法实现3.1.3 归并时间 3.2 分治策略3.2.1 实现3.2.2 排序时间 4. 总…

【Java】基本程序设计结构(二)

前言:上一篇我们详细介绍了Java基本程序设计结构中前半部分,一个简单的Java应用,注释,数据类型,变量与常量,运算符,字符串。包括本篇将延续上篇内容介绍后续内容,包括输入输出&#…

正则表达式之python中re模块的使用以及一些习题

正则表达式 正则表达式是一种用来描述字符串模式的方法。它是一种强大的工具,用于在文本中搜索、匹配和编辑特定模式的字符串。正则表达式可以用来验证输入是否符合某种模式,提取文本中的特定信息,以及进行文本的替换和分割等操作。在计算机…

AutoTable, Hibernate自动建立表替代方案

痛点 之前一直使用JPA为主要ORM技术栈,主要是因为Mybatis没有实体逆向建表功能。虽然Mybatis有从数据库建立实体,但是实际应用却没那么美好:当实体变更时,往往不会单独再建立一个数据库重新生成表,然后把表再逆向为实…

python关键字(break)

7、break 深入理解Python 3.8中的break关键字 在Python编程中,break是一个控制流语句,用于立即退出最内层的循环。它对于需要中断循环并在满足特定条件时继续执行的程序非常有用。本文将带您从基础到进阶,深入了解break在Python 3.8中的用法…

算法打卡day42

今日任务: 1)121. 买卖股票的最佳时机 2)122.买卖股票的最佳时机II 3)复习day17 121. 买卖股票的最佳时机 题目链接:121. 买卖股票的最佳时机 - 力扣(LeetCode) 给定一个数组 prices&#xff0…

渠道管控治理思路建议

品牌在做控价时,一定要有渠道一体化的治理想法,不能只能打击某一家店铺为想法进行治理,比如只打击非授权,只不去管理授权体系的经销商店铺,这显然是不行的,管理非授权的同时,授权也要管理好&…

QT+串口调试助手+扩展版

前言:此文章是这篇文章的拓展 QT串口调试助手基本版-CSDN博客,如果需要独立完成串口调试助手直接看基本版文章即可,如果需要完成串口调试助手的其他功能,参考拓展版。 一、更新QT串口调试助手UI界面 1、ui串口设置界面 2、ui串口…

SpringBoot+vue实现token认证登录

目录 后端(Spring Boot) 1. 创建用户实体和数据库表 2. 用户注册和登录接口 3. JWT Token生成 4. JWT Token验证 前端(Vue.js) 1. 用户界面 2. 发送登录请求 3. 接收并存储Token