gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:48:07 26 4
gpt4 key购买 nike

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

我在使用表单访问示例脚本与表单交互时遇到了问题。

它在 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 个参数。

我会将其作为评论发布在 GitHub 上,我无法真正直接修复它,因为我对整个 Pascal 脚本进行了大量更改,因此它支持复杂的数学。

关于delphi - 在 64 位模式下编译 Pascalscript,事件不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33648962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com