C语言从句柄到对象 (二) —— 极致的封装:不透明指针与 SDK 级设计

前言: 上一期我们定义了 Motor_t 结构体,并用指针 Motor_t* 作为句柄。 这种写法在团队内部使用没问题,但如果你是给别人写 库 (Library) 或 SDK,这种写法就是“不及格”的。

为什么?因为你把“内裤”都露给别人看了。


一、 “裸奔”的代价:为什么我们需要黑盒子?

让我们回顾一下上一期的代码。我们在头文件 motor.h 里是这样定义的:

// motor.h (上一期的写法,暂且称为 V1.0)
typedef struct {
    uint8_t current_speed;  // 内部状态
    uint8_t is_running;     // 内部标志位
    GPIO_TypeDef *port;     // 硬件配置
} Motor_t;

void Motor_SetSpeed(Motor_t *h, uint8_t speed);

这种写法最大的问题在于:使用者(User)能看到结构体的所有细节。

假设你发布了这个库。你的同事(或者未来的你自己)在写 main.c 时,为了图省事,可能会写出这种代码:

// main.c
int main() {

C#调用C++ DLL完整指南:P/Invoke方案与工程化实践 在软件开发中,动态链接库(DLL)是实现代码复用和模块化的重要技术,它允许不同编程语言编写的模块相互调用。其核心原理是通过预定义的二进制接口,实现跨语言函数调用和数据交换。这一技术价值在于能够充分发挥各语言优势,例如结合C#的高开发效率和C++的底层性能。在图像处理、音视频编解码、系统级编程等对性能要求较高的应用场景中,通过C#调用C++ DLL成为常见解决方案。本文以P/Invoke技术方案为例,详细解析了从项目创建、接口设计到内存管理和调试的完整实现流程,涵盖了数据类型映射和资源释放等关键工程实践,帮助 阅读详情

相关推荐

ROS 2内部接口解析:rcl/rmw/rosidl三层契约与底层通信机制

ROS 2并非简单的中间件封装,而是一套以可移植性、实时性和跨语言稳定性为硬约束的分层架构体系。其核心在于rcl(客户端抽象层)、rmw(中间件适配层)和rosidl(接口定义与序列化层)三者间严格定义的隐式契约——这些‘内部接口’不面向应用开发,却决定了消息能否跨DDS实现互通、定时器为何在spin中失效、以及shutdown回调为何静默丢失。理解rcl层状态机、rmw类型支持绑定机制与rosidl二进制布局约束,是实现零拷贝通信、FreeRTOS嵌入、FPGA内存共享及硬实时控制的前提。本文深入拆解这三

weixin_33811539的博客 734

深入解析库文件格式:从静态/动态库到ETM项目实践

库文件是软件工程中实现代码复用的核心组件,主要分为静态库和动态库两种形态。静态库在编译时链接,生成独立可执行文件;动态库在运行时加载,支持多程序共享。理解其二进制接口、依赖管理和文件格式,对于构建稳健的软件架构至关重要。在工程实践中,库文件管理直接影响开发效率与系统稳定性,涉及依赖解析、版本控制和部署运维等环节。本文结合ETM项目场景与常见热词问题,系统探讨了库文件在Java应用部署、系统包管理锁冲突及第三方库集成中的典型挑战与解决方案,为构建规范的库管理体系提供实践指导。

weixin_30567225的博客 732

基于PaddleOCR的离线多语言OCR SDK:从模型优化到跨平台部署实战

OCR(光学字符识别)技术是实现图像文字自动提取的关键,其核心原理是通过深度学习模型对图像中的文本区域进行检测与识别。这项技术的价值在于将非结构化的图像信息转化为可编辑、可搜索的文本数据,极大地提升了信息处理效率。在数据安全要求高、网络环境不稳定或需要深度集成的应用场景中,离线OCR SDK成为刚需。本文聚焦于如何将PaddleOCR这一优秀的开源多语言OCR引擎,通过模型量化、架构封装与跨平台构建,打造为一个轻量级、易集成的离线SDK,解决了部署复杂和依赖繁重等工程难题,为桌面应用、移动端App及边缘设备

weixin_34050005的博客 470

ERA5数据批量下载

ERA5再分析数据的IDM接管下载

qq_38734327的博客 3035

Android11,无障碍服务模拟多手势使用dispatchGesture时总是onCancelled

AccessibilityService的dispatchGesture去模拟多手势,总是onCancelled的一种解决办法

m0_49953943的博客 2103

STM32H750实战:用TIM+DMA驱动ADC/DAC实现音频回环(附CubeMX配置避坑指南)

本文详细介绍了在STM32H750上构建高保真、低延迟音频链路的实战方法。通过配置TIM定时器作为硬件节拍器,精准触发ADC采集与DAC播放,并利用DMA实现数据的自动搬运,全程无需CPU干预。文章重点剖析了CubeMX配置中的关键步骤与常见“坑点”,如ADC的Conversion Data Management模式选择、DMA的FIFO与Burst模式配置,以及STM32H7系列必须开启ADC全局中断等,并提供了完整的代码实现与调试验证指南。

1057

微信小程序 - 详细实现可移动悬浮按钮,全屏悬浮元素图标可拖动拖拽并自动吸附边缘,微信小程序实现悬浮球吸附边缘+计算靠边靠拢效果(详细代码,拖拽中途放手,靠左就自动跑到屏幕左侧,反之靠右跑到屏幕右侧)

微信小程序,vue2,vue3,微信小程序悬浮功能小按钮,自动吸附边缘效果,微信小程序之可拖动悬浮按钮的实现,如何实现靠近边缘自动吸住功能,小程序右下角的悬浮效果,实现可拖动悬浮图标,自动向两边靠拢,悬浮按钮的实现,微信小程序悬浮球效果,微信小程序(可拖动悬浮按钮)当靠近屏幕边缘时会磁吸靠近,如何实现全局悬浮按钮,悬浮球判断吸附在左右,全屏悬浮能拖着走,小程序怎么做悬浮图标靠近左右两侧能吸附住,悬浮菜单按钮,悬浮球可拖拽,全局悬浮球,全局悬浮框,实现悬浮按钮可拖动,自动吸附边缘效果,若按钮此时位于页面中间偏

🏆 前端领域优质创作者 1万+

让 ABAP 复杂内表优雅“喂饱”:Complex Internal Table Filling 全面实战指南

本文为ABAP开发者系统梳理了复杂内表的填充与复制方法。重点介绍了work area的两种声明方式、APPEND操作的多形态用法及其初始值语义,以及VALUE #( )构造器的逐行与整表写法。同时讲解了CORRESPONDING的同名字段映射功能,帮助开发者在"航司与航线"等复杂业务场景中实现最佳实践。文章还涵盖内存优化、可读性建议和常见误区,提供可运行样例,适用于ABAP On-Premise和SAP BTP环境。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 169

贝叶斯网络在R语言中的应用

本文将介绍如何在R语言中使用贝叶斯网络进行建模和推断,并提供相应的源代码示例。以上就是在R语言中使用贝叶斯网络进行建模和推断的基本步骤。通过构建贝叶斯网络模型并使用相应的函数,我们可以对变量之间的依赖关系进行建模、推断和预测。在建立了贝叶斯网络模型后,我们可以使用数据集来估计变量之间的条件概率。接下来,我们可以使用数据集来构建贝叶斯网络模型。除了进行推断,我们还可以使用贝叶斯网络模型进行预测。一旦我们获得了贝叶斯网络模型和条件概率表,我们就可以使用该模型进行推断。首先,我们需要安装并加载相关的R包。

CodeMaven的博客 1278

Transformer模型详解

​本文主要介绍Transformer系列,从基础到理论,对注意力机制进行总结并解释《Attention is all you need》,提出解决sequence to sequence问题的transformer模型,用全attention的结构代替了lstm,抛弃了之前传统的encoder-decoder模型必须结合cnn或者rnn的固有模式,只用attention。文章的主要目的是在减少计算量和提高并行效率的同时不损害最终的实验结果。

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 5307

QGis软件 —— 9、QGis - 由点绘制热力图来模拟人流量(绘制点方式、excel导入数据方式)

QGis软件 —— 9、QGis - 由点绘制热力图来模拟人流量(绘制点方式、excel导入数据方式)

1470

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

上一篇: C语言从句柄到对象 (一) —— 全局变量的噩梦与“多实例”的救赎
下一篇: C语言从句柄到对象 (三) —— 抛弃 Malloc:静态对象池与索引句柄的终极形态
一路往蓝-Anbo
博客等级 码龄8年 796粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一路往蓝-Anbo

转发是最高褒奖,硬核打赏随心!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值