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.
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.