From 1deb3125bec766ffbf01d30b1e71ebcae6f709b7 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Mon, 21 Sep 2026 16:19:32 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20Pavo=20=E5=B8=83=E5=B1=80=E8=87=AA?= =?UTF-8?q?=E6=A3=80=E6=9C=9F=E6=9C=9B=E5=80=BC=E9=94=99=E8=AF=AF=EF=BC=88?= =?UTF-8?q?80=E2=86=9288=EF=BC=89=E2=80=94=E2=80=94=E4=B8=8A=E4=B8=80?= =?UTF-8?q?=E8=BD=AE=E5=AE=A1=E6=9F=A5=E6=97=B6=E6=89=8B=E6=95=B0=E9=94=99?= =?UTF-8?q?=E4=BA=86=E6=8C=87=E9=92=88=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户 Windows 实测触发 HitiCardPrintParameter 布局 assert。mac 实测 sizeOf 坐实:HitiCardPrintParameter=88(4×uint32 + 8×uint8 + 8×pointer = 24+64, 8 个指针=front BGR/K/O + back BGR/K/O + Reserve×2),其余三个(32/16/48) 正确——结构体布局本身与 C# 实机版一致,错的只是 assert 里手写的期望值 80。 顺带:此错误当时被 pavo_isolate_test 的 catch 转 offline 文案掩盖(断言只查 unsendable),新增 test/pavo_ffi_layout_test 直接 expect 四个 sizeOf, 布局回归在 mac 上即红,不必等 Windows 实机。15 测试全过。 --- lib/print/pavo/pavo_ffi.dart | 2 +- test/pavo_ffi_layout_test.dart | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 test/pavo_ffi_layout_test.dart diff --git a/lib/print/pavo/pavo_ffi.dart b/lib/print/pavo/pavo_ffi.dart index 3b8ec77..6136eec 100644 --- a/lib/print/pavo/pavo_ffi.dart +++ b/lib/print/pavo/pavo_ffi.dart @@ -21,7 +21,7 @@ class PavoApi { _printOneCard = _tryPrintOneCard('PAVO_PrintOneCardW') ?? _tryPrintOneCard('PAVO_PrintOneCard')!; // 布局自检:Dart Struct 按 C ABI 自然对齐,与 C# 版(已实机验证)的 // sizeof 逐一核对;首个 Windows 环境首跑即暴露对齐差异 - assert(sizeOf() == 80, 'HitiCardPrintParameter 布局异常'); + assert(sizeOf() == 88, 'HitiCardPrintParameter 布局异常'); assert(sizeOf() == 32, 'GdiBitmap 布局异常'); assert(sizeOf() == 16, 'HitiHeatingEnergy 布局异常'); assert(sizeOf() == 48, 'HitiSettings 布局异常'); diff --git a/test/pavo_ffi_layout_test.dart b/test/pavo_ffi_layout_test.dart new file mode 100644 index 0000000..f79825c --- /dev/null +++ b/test/pavo_ffi_layout_test.dart @@ -0,0 +1,16 @@ +import 'dart:ffi'; + +import 'package:desktop_plugin/print/pavo/pavo_ffi.dart'; +import 'package:flutter_test/flutter_test.dart'; + +/// Pavo ffi 结构体布局守护:与 C# 实机验证版的 sizeof 逐一核对。 +/// 布局错误在 mac 上跑本测试即红,不必等 Windows 实机。 +/// (HitiCardPrintParameter = 4×uint32 + 8×uint8 + 8×pointer = 24+64 = 88) +void main() { + test('Pavo ffi 结构体布局与 C ABI 一致', () { + expect(sizeOf(), 88); + expect(sizeOf(), 32); + expect(sizeOf(), 16); + expect(sizeOf(), 48); + }); +}