Skip to content

emrg: replace WPARAM/LPARAM with DWORD in SendMessageTimeout (IS 6.7.1 lacks them) — v0.2.2 CI 三次修复 - #400

Merged
argszero merged 1 commit into
masterfrom
feature/iss-wparam-dword
Aug 5, 2026
Merged

emrg: replace WPARAM/LPARAM with DWORD in SendMessageTimeout (IS 6.7.1 lacks them) — v0.2.2 CI 三次修复#400
argszero merged 1 commit into
masterfrom
feature/iss-wparam-dword

Conversation

@argszero

@argszero argszero commented Aug 5, 2026

Copy link
Copy Markdown
Owner

背景

v0.2.2 Build Release CI 三次失败链(Windows job):

  1. emrg: fix emrg.iss heredoc $FFFF unbound variable (v0.2.2 CI 修复) #397:heredoc 中 $FFFF 被 bash 展开 → unbound variable ✅ merged
  2. emrg: remove duplicate Inno const block (IS 6.3+ builtin) — v0.2.2 CI 二次修复 #398[Code] const 段重复定义 HWND_BROADCAST(iscc 内置)✅ merged
  3. 本轮Unknown type 'WPARAM' @ emrg.iss line 37

根因(issrc is-6_7_1 标签源码验证)

  • WPARAM/LPARAM 类型在 Inno Setup 6.7.2+ 才加入 iscc 预置(issrc commit 27bce18660, 2025-12-27 "Add WPARAM and LPARAM types")
  • runner windows-2025 安装 Inno Setup 6.7.1(Compiler.ScriptFunc.pas 仅注册 DWORD/UINT/BOOL/UINT_PTR/INT_PTR 等,无 WPARAM/LPARAM)
  • Unknown type 'WPARAM',编译中止

修复

packaging/make-installer.sh SendMessageTimeout 声明中 wParam: WPARAM; lParam: LPARAMwParam: DWORD; lParam: DWORD

  • iscc 生成 32 位安装器,WPARAM/LPARAM 在 32 位下即 4 字节,与 DWORD(LongWord)完全兼容
  • 调用处 SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0, SMTO_ABORTIFHUNG, 5000, Dummy) 传 0/0 无影响
  • HWND 保留(CI 实测 6.7.1 可用,uPSCompiler 内置)
  • R122 注释记录版本差异(6.7.1 vs 6.7.2+)

验证

  • heredoc set -u 模拟:无 unbound variable、无 WPARAM/LPARAM 使用、5 个有意变量正常
  • sh -n OK
  • 466 passed + import OK + emrg --help OK

预期

Windows iscc 编译通过 → 4 平台 build 全绿 → release job 产出 v0.2.2 资产(含 windows-x64.exe)。合并后需重建 tag v0.2.2(当前 tag 指向 8cba1f1#399 卸载修复 afed79c 未包含)。

… 6.7.1 lacks them)

v0.2.2 Build Release CI 三次失败链:#397 heredoc → #398 HWND_BROADCAST 重复 → 本轮 WPARAM 类型。

根因(issrc is-6_7_1 标签源码验证):
- WPARAM/LPARAM 类型在 Inno Setup 6.7.2+ 才加入 iscc 预置
  (issrc commit 27bce18660, 2025-12-27 "Add WPARAM and LPARAM types")
- runner windows-2025 安装 Inno Setup 6.7.1 → Unknown type 'WPARAM'
- 6.7.1 已注册类型:DWORD/UINT = LongWord(Compiler.ScriptFunc.pas:88-89)

修复:SendMessageTimeout 的 wParam/lParam 参数类型 WPARAM/LPARAM → DWORD。
iscc 生成 32 位安装器,WPARAM/LPARAM 在 32 位下为 4 字节,与 DWORD 完全兼容;
调用处传 0, 0 无影响。HWND 保留(CI 实测 6.7.1 可用,uPSCompiler 内置)。

验证:heredoc set -u 模拟(无 unbound、无 WPARAM/LPARAM 使用)+ sh -n
+ 466 passed + import OK + --help OK

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 20260805-1553. 第 1 个 LGTM。根因链完整:v0.2.2 三次失败 = heredoc(#397)→ HWND_BROADCAST 重复(#398)→ WPARAM 类型缺失(本轮)。独立验证 issrc is-6_7_1 标签:Compiler.ScriptFunc.pas 注册 DWORD/UINT=LongWord(:88-89)但无 WPARAM/LPARAM(27bce18660 为 2025-12-27 后加,6.7.2+);CI 只报 WPARAM 说明 HWND 可用。修复最小化:仅改参数类型 DWORD,32 位安装器兼容。heredoc set -u + sh -n + 466 passed 通过。

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 20260805-1601. 第 2 个 LGTM。独立复核:① diff 最小化 — 仅 SendMessageTimeout 参数 WPARAM/LPARAM → DWORD(+R122 注释);② 6.7.1 已注册类型确认(DWORD/UINT = LongWord,Compiler.ScriptFunc.pas:88-89);③ 32 位安装器下 WPARAM/LPARAM = 4 字节与 DWORD 完全兼容,调用处传 0/0 无影响;④ heredoc set -u 模拟无 unbound + 无 WPARAM/LPARAM 使用(仅注释提及)+ sh -n OK;⑤ CI test pass 32s。LGTM 2/3。

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle 20260805-1602. 第 3 个 LGTM(连续 3 个:1553/1601/1602)。独立复核:① diff 最小化(仅函数声明 2 类型替换 + R122 注释);② WPARAM/LPARAM 仅在注释提及,声明已全用 DWORD;③ 32 位安装器下 WPARAM=LongWord=DWORD,ABI 完全兼容;④ sh -n 通过。合并条件满足。

@argszero
argszero merged commit 4af86ce into master Aug 5, 2026
1 check passed
argszero added a commit that referenced this pull request Aug 5, 2026
…k comment broke iscc (v0.2.2 CI 四次失败) (#402)

v0.2.2 Build Release CI 四次失败链:#397 heredoc → #398 HWND_BROADCAST 重复 →
#400 WPARAM 类型缺失 → 本轮:line 88 Syntax error({olddata})。

根因:Inno Setup Pascal 块注释 { } 不支持嵌套。R119 大注释块
"{ R119: ... {app} ... {olddata} ... }" 内含 {app}/{olddata},内部的 }
提前终止注释块 → 后续内容变成代码 → "Syntax error"(line 88 column 19)。

修复:将含 {app}/{olddata} 的 2 处块注释改为 Pascal // 行注释
(AddBinDirToPath 上方 7 行 + RemoveBinDirFromPath 上方 1 行)。
其余块注释(R120/R122/R119 单行)无嵌套花括号,保持 { } 不变。

验证:heredoc set -u 模拟(无 unbound + 无嵌套花括号)+ sh -n
+ 466 passed + import OK + --help OK。

Co-authored-by: EMRG Evolution <emrg@argszero.dev>
@argszero
argszero deleted the feature/iss-wparam-dword branch August 5, 2026 08:37
argszero added a commit that referenced this pull request Aug 5, 2026
* emrg: bump v0.2.3 — Windows 修复集打版(#399 卸载彻底 + #401 TUI + #403 真实报错)

rant 2026-08-05T17:26:40:master 已合入 6 个 Windows 相关修复但未打 tag,
Windows 用户仍在使用旧安装包。本次 bump 0.2.2 → 0.2.3 并推 tag 触发发布链:
- #399 卸载彻底(kill GUI + whitelist + [UninstallDelete])
- #400 Inno WPARAM/LPARAM → DWORD
- #401 Windows TUI 适配(Win32Console + stdin/resize 线程化)
- #402 Inno 嵌套花括号注释
- #403 daemon start timeout 显示 emrgd.log 尾部真实报错
- #405 README 同步

版本文件 4 处同步:pyproject.toml / __init__.py / make-installer.sh / build-runtime.sh

* emrg: sync uv.lock to 0.2.3

---------

Co-authored-by: EMRG Evolution <emrg@argszero.dev>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant