如何从delphi调用一个将类作为参数的DWScript过程?
例如:
DWScript方:
procedure Proc1(AParam: TObject);
begin
// do something useful
end;
德尔福方面:
var
Obj: TObject;
Exec.Invoke('Proc1', [obj]);
答案 0 :(得分:1)
您需要将Delphi端对象包装到脚本端对象中,并在需要时创建一个。
对于曝光,您可以使用TdwsUnit并手动曝光(这可以保护Delphi端类免受脚本误操作),或者使用RTTI曝光(但在这种情况下,脚本端的错误将能够直接影响Delphi,因此可能会导致主机崩溃,所以如果您知道您的类已经安全,或者您不关心沙盒,请仅使用RTTI。
如果你需要的只是一个简单的曝光,那么更简单的方法是使用RTTI环境(参见URTTIExposeTests中的TRTTIExposeTests.EnvironmentTest),但请记住上面关于RTTI和安全/沙盒的注释。
更复杂的方法是使用类似
的代码创建脚本端对象
scriptObj := Info.Vars['TScriptSideClassName'].Method['Create'].Call([param1, param2]);
然后手动调整其ExternalObject属性。
您可能还需要担心只创建一次脚本端对象(如果您希望脚本端对象比较正常工作),以及清理(即如果Delphi端对象被释放会发生什么)当脚本仍在运行时,或者谁应该负责在释放脚本端对象时释放Delphi端对象),以及其他细微之处(如果Delphi获得某种形式的自动内存管理,这将变得更简单)。