在 64 位模式下编译 Pascalscript,事件不起作用?

Compiling Pascalscript in 64 bit mode, events not working?

我已经下载并开始使用 Pascalscript 及其示例程序。

我在使用 Forms 访问示例脚本连接到 Forms 时遇到了问题。

它在 32 位模式下工作,在 64 位模式下不会触发任何事件。

也就是说,按钮 onpress 事件从不调用 pascalscript onpress 代码。

我在 windows 7 pro 上使用 Delphi 10 Seattle。

关于如何让脚本在 64 位平台上正常工作有什么想法吗?

好吧,既然没有人回答这个问题,我必须自己做这项艰苦的工作。

所以问题是在从 delphi 到用汇编程序编写的 pascalscript 方法调用的转换中,x64 的空序言代码。在uPSruntime单元中调用了空方法处理程序"MyAllMethodhandler",我的代码解决方案如下

function MyAllMethodsHandler2(Self:PScriptMethodInfo; const Stack:PPointer; _EDX,_ECX:Pointer):Integer; forward;

{$ifdef CPUX64}
procedure MyAllMethodsHandler;
//  On entry:
//  RCX = Self pointer
//  RDX, R8, R9 = param1 .. param3
//  STACK = param4... paramcount
asm
  PUSH  R9
  MOV   R9,R8     // R9:=_ECX
  MOV   R8,RDX    // R8:=_EDX
  MOV   RDX, RSP  // RDX:=Stack
  SUB   RSP, 20h
  CALL MyAllMethodsHandler2
  ADD   RSP, 20h  //Restore stack
  POP   R9
end;
{$else}

procedure MyAllMethodsHandler;   //original x86 code
//  On entry:
//  EAX = Self pointer
//  EDX, ECX = param1 and param2
//  STACK = param3... paramcount
asm
  push 0
  push ecx
  push edx
  mov edx, esp
  add edx, 16 // was 12
  pop ecx
  call MyAllMethodsHandler2
  pop ecx
  mov edx, [esp]
  add esp, eax
  mov [esp], edx
  mov eax, ecx
end;
{$endif}

不确定这是否适用于所有情况,但似乎至少适用于 2 个参数。

我将 post 作为对 GitHub 的评论,我无法直接修复它,因为我对整个 Pascal 脚本进行了大量更改,因此它支持复杂的数学运算。