DWS 可以调用样品单元的功能吗?

May DWS calling functions from sample unit?

DWS可以从样机中调用函数吗?例如:

FExecution.Info.Func['Test.ClickProc'].Call(AParams); (This is not working)

FExecution - IdwsProgramExecution;

脚本代码中声明的函数:

unit Test;
Uses UTestUnit;
procedure TestFunc(LParam: string);
begin
  ShowMessage(LParam);
end;
procedure ClickProc(Sender: TObject);
begin
  ShowMessage('DWS');
end;
var  S: TStringList;
var  btn: TButton;
begin
  btn := TButton.Create(MainForm);
  btn.OnClick := ClickProc;
  btn.Parent(MainForm);
end.

本例中的 ClickProc。

我觉得做不到。

调用 Info.Func[] 时的符号查找不会将名称解析为单位范围和标识符,而是对名为 "Test.ClickProc" 的符号进行简单查找。但是,由于 ClickProc 过程符号被命名为 "ClickProc",所以查找没有找到它。

我认为也许可以通过符号表手动找到过程符号...

var
  FExecution: IdwsProgramExecution;
  UnitSymbol: TUnitMainSymbol;
  FuncSymbol: TFuncSymbol;
  Info: IInfo;
begin
  ...
  UnitSymbol := FExecution.Prog.UnitMains.Find('Test');
  FuncSymbol := UnitSymbol.Table.FindSymbol('ClickProc', cvPublic) as TFuncSymbol; // Returns nil :-(
  Info := FExecution.Info.FuncBySym[FuncSymbol];
  Info.Call;
  ...

...但是在查阅了 "documentation" 之后(阅读:研究源代码,使用调试器逐步完成并反复试验)我来到了目前无法可靠地完成的结论。它 可以在许多符号表之一中找到 "ClickProc" 符号,但我无法找到一种可靠的方法来用单位 name/symbol.