gpt4 book ai didi

delphi - 从delphi调用一个类作为参数的dwscript过程

转载 作者:行者123 更新时间:2023-12-03 15:35:13 26 4
gpt4 key购买 nike

如何从 delphi 调用以类作为参数的 DWScript 过程?

例如:

DWScript 端:

procedure Proc1(AParam: TObject);
begin
// do something useful
end;

德尔福方面:

var
Obj: TObject;


Exec.Invoke('Proc1', [obj]);

最佳答案

您需要将 Delphi 端对象包装到脚本端对象中,并根据需要创建一个。

对于暴露,您可以使用 TdwsUnit 并手动暴露(这可以保护 Delphi 端类免受脚本误操作),或使用 RTTI 暴露(但在这种情况下,脚本端的错误将能够直接影响 Delphi,从而可能使主机崩溃,因此只有在您知道您的类已经安全或者您不关心沙箱时才使用 RTTI。

如果您只需要简单的暴露,则更简单的方法是使用 RTTI 环境(参见 URTTIExposeTests 中的 TRTTIExposeTests.EnvironmentTest),但请记住上面有关 RTTI 和安全/沙箱的说明。

更复杂的方法是使用如下代码创建脚本端对象


scriptObj := Info.Vars['TScriptSideClassName'].Method['Create'].Call([param1, param2]);

然后手动调整其ExternalObject属性。

您可能还需要担心只创建一次脚本端对象(如果您希望脚本端对象比较照常工作),以及清理(即如果 Delphi 端对象被释放会发生什么)当脚本仍在运行时,或者当脚本端对象被释放时谁应该负责释放 Delphi 端对象),以及其他微妙之处(当/如果 Delphi 获得某种形式的自动内存管理时,这将变得更简单)。

关于delphi - 从delphi调用一个类作为参数的dwscript过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10852297/

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