我该如何在Delphi中调用一个接受类作为参数的DWScript过程? 例如: DWScript端: procedure Proc1(AParam: TObject); begin // do something useful end; Delphi方面: 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获得某种形式的自动内存管理,这将变得更简单)。