跳转到内容

ABI 与版本兼容

核心实现使用 C++20,但 include/ 只导出 C11 与 C++ 都能用的 C ABI。0.2.0 把跨语言的 FD、超时与状态计数统一为定宽类型,布尔结果使用 uint8_t,并为公开 DTO 固定了八字节布局;使用 0.1.x 的下游必须重新编译。

线上 mirage-display-v1 协议、报文语义、FD 所有权和回调顺序保持不变。

  • 跨边界整数使用定宽类型:uint32_t / int64_t / uint8_t 等;不暴露 int / long / size_t 这类宽度含糊的类型(长度参数除外)。
  • 公开 DTO 使用 #pragma pack(push, 8) 显式八字节打包,不依赖编译器默认布局。
  • 布尔结果使用 uint8_t,不暴露 bool。
  • 共享头文件使用 #ifdef __cplusplus extern "C" 守卫,只含 C 兼容声明。
  • 回调负载默认是借用的;帧的 acquire/release FD 显式转移所有权;断连时库持有的所有描述符都会恰好关闭一次。
  • 跨边界的字符串/缓冲区使用“指针 + 长度”,或明确约定 '\0' 结尾;禁止在运行时猜测结尾或长度。
  • 内存所有权在头文件注释中写明“谁分配、谁释放”;跨边界对象一律使用归属方提供的创建/销毁函数对。
  • 延迟解绑(md_display_defer_unbind / md_display_finish_unbind)必须在协议事件线程完成,不能在渲染线程直接调用。