“C++”标签的文章
带有“C++”标签的文章共 19 篇,按发布日期从新到旧排列。
-
Time Travel Debugging ── 把长期运行中不复现的缺陷“录下来”再倒回去
一个月才出一次的缺陷,崩溃转储只拍得到结果。本文讲解如何用 WinDbg 的 Time Travel Debugging(TTD) 录制执行并倒回,涵盖 TTD.exe 的录制设计、环形缓冲区、TTD.Calls 查询,以及与转储的分工。
-
参数为什么会坏掉 ── Windows 命令行参数的规则
在 Windows 上并不存在参数的数组,传给 CreateProcess 的是一条字符串,切分由接收方完成。本文讲解 CommandLineToArgvW・CRT・.NET 的切分规则,以及 .NET 的 ArgumentList 与 C++ 中正确的组装方法。
-
父进程消失之后还剩下什么 —— 用 Job Object 圈养子进程
为什么强制结束 UI 之后,SDK 的辅助进程仍然残留,一直占着摄像头或 COM 端口?本文从测量应用的视角,讲解如何用 Job Object 把进程树变成一个单位,并借助 KillOnJobClose 与完成端口来设计子进程的寿命。
-
Win32 线程池 API ── 用 CreateThreadpoolWork 实现「不自建线程」的并发
原生代码里是不是到处都在 CreateThread?本文依据一手资料讲解 Vista 全面重新设计的 Win32 线程池 API:work、timer、wait、io 四种对象,清理组,以及回调中禁止做的事。
-
命名管道实务 ── 从设计到安全,吃透 Windows 进程间通信的标准方案
以实务视角讲解 Windows 进程间通信的标准方案——命名管道。依据一手资料梳理字节模式与消息模式的取舍、同时接纳多个客户端的服务器结构、ACL 与模拟的安全设计,以及 .NET 的命名管道流。
-
DllMain 与加载器锁——“DLL 初始化里什么都别做”的真正原因
为什么不能在 DllMain 里调用 LoadLibrary 或与线程同步。本文依据一手资料,从串行化全部 DLL 通知的加载器锁机制,讲到死锁成立的典型场景、延迟初始化等正确设计,以及挂起的调查步骤。
-
虚假唤醒——条件变量为什么会“没有通知也醒来”,以及 Windows 上正确的等待写法
条件变量的 wait 即使没有收到通知也可能返回(虚假唤醒)。本文从 Windows 的实现出发说明规范为何允许这一点,并用 Win32、C++ 和 C# 的代码给出以 while 循环和谓词编写的正确等待写法。
-
多线程实战最佳实践 C++ 篇——用 RAII 和 jthread 从结构上杜绝问题
C++ 的多线程里数据竞争就是未定义行为。本文梳理 std::thread 析构函数的陷阱、jthread 与 stop_token 的停止设计、scoped_lock 的死锁规避、atomic 的正确定位,直到与 Win32 同步 API 的区分使用。
-
DLL・COM 接口的向后兼容性 ── 判断哪些改动会破坏调用方的对照表
DLL 或 COM 组件的哪些改动会破坏调用方?本文整理二进制兼容、源代码兼容、行为兼容这三层概念,给出按改动类型划分的判断表、COM 接口不可变的铁律,以及 semver 的实务运用方法,作为一份实务指南。
-
Windows 的 MFC 是什么 —— 维护现有资产所需的基础知识
整理 Microsoft Foundation Classes(MFC)的概要、与 Win32 的关系、应用程序结构、消息映射、Document/View、DDX/DDV,以及维护时需要注意的要点。
-
Windows 应用安全处理子进程的检查清单
在 Windows 应用中安全处理子进程,比起选择启动 API,更重要的是设计进程树的所有权和结束流程。本文整理 Job Object、退出传播、标准输入输出与 watchdog。
-
Windows 应用的单文件分发 - 单一可执行文件与系统依赖的界限
在想把 Windows 应用收拢成 1 个 EXE 时,把发布物合并成一个文件与消除系统依赖是两回事。本文围绕 .NET、C++、WebView2、WinUI、服务与驱动,梳理这两者的区别。
-
共享内存的陷阱与实务最佳实践
整理在实务中使用共享内存时的陷阱,以及涵盖同步、可见性、生命周期、ABI、权限等降低出问题概率的设计方法。
-
如何公平比较 C#/C++/Java/Go 的运行速度
整理如何公平比较 C#、C++、Java、Go 的运行速度,涵盖测量设计、warm-up、环境固定、统计数据的解读方式,以及具体的基准测试项目。
-
用 Media Foundation 把图片和文字烧录进 MP4 的方法
本文整理用 Media Foundation 向 MP4 视频的每一帧烧录图片与文字、生成新 MP4 的思路,梳理 Source Reader、绘制、色彩转换、Sink Writer 各自的职责分工,并给出单文件即可运行的 C++ 示例。
-
在 Media Foundation 中把 YUV 转换为 RGB 的方法
从 Source Reader 自动转换与 NV12/YUY2 手动转换、stride、色彩空间几个角度,梳理在 Media Foundation 中把 YUV 帧转换为 RGB 的方法。
-
用 Media Foundation 从 MP4 的指定时刻提取静止图像的方法
本文整理用 Source Reader 从 MP4 中取出最接近指定时刻的帧,处理好 stride 与 RGB32 的第 4 个字节(alpha)之后保存为 PNG 的完整实现步骤。
-
如何从 C/C++ 调用 C# Native AOT DLL
本文整理如何把 C# 类库通过 Native AOT 发布为原生 DLL,并通过 UnmanagedCallersOnly 的入口点让 C/C++ 调用它,从适用场景、实现模式到注意事项逐一梳理。
-
Media Foundation 入门:用 COM 视角理解 API
本文按照最先需要掌握的顺序,结合 COM、HRESULT、IMFSourceReader、MFT 等 Windows 媒体 API 的基础术语,整理 Media Foundation 到底是什么。