You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi 11.3 Alexandria中SvCom服务Win64平台无法启动求助

解决Delphi 11.3 64位下SvCom服务SetServiceStatus无效问题

问题根源

你的64位汇编代码未正确遵循Delphi 11.3的x64调用约定,栈帧处理存在疏漏。32位环境与旧版本Delphi能正常运行,是因为它们的栈帧管理规则和11.3的x64环境不兼容,导致服务状态设置时上下文出错,触发句柄无效的错误。

修复方案

修改SvSetservicestatus函数的x64汇编部分,补充栈帧维护逻辑,确保符合Delphi 11.3的x64规范:

const PSvSetServiceStatus: Pointer = nil;
function SvSetservicestatus;
asm
    call InitNTServiceDebug
{$IFDEF CPUX64}
    // 64位环境下正确维护栈帧
    push rbp
    mov rbp, rsp
    Mov rax, qword PTR [PSvSetServiceStatus]
    test rax,rax
    Jz @SetServicestatus
    // 跳转前恢复栈帧
    pop rbp
    Jmp qword Ptr [PSvSetServiceStatus]
@SetServicestatus:
    pop rbp
{$ELSE}
    Pop EBP
    Cmp DWORD Ptr [PSvSetServiceStatus],$00
    JZ SetserviceStatus
    jmp DWORD Ptr [PSvSetServiceStatus]
{$ENDIF}
end;

验证步骤

  1. 清理旧的64位服务注册记录
  2. 重新编译修改后的代码为64位目标平台
  3. 注册服务并启动,或使用DEBUG参数在SvCom窗口测试

内容的提问来源于stack exchange,提问作者Federico Pessina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 19:27:58