2016-08-29 10 views
0

サンプルユニットからDWS関数を呼び出すことができますか?例:サンプルユニットから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。

+0

[プロシージャ型引数を持つスクリプトから呼び出されるDelphiオブジェクトのメソッドを宣言する方法](http://stackoverflow.com/a/33253042/576719)の回答は、あなたが探しているものですか? –

+0

いいえこの答えでは、関数名でのみ呼び出すGraymatterです。ユニット名と機能で呼び出す必要があります。そして、残念ながら、スクリプトコードで宣言された関数を忘れてしまいます。 –

答えて

1

私はできないと思います。

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

...多分シンボルテーブルを経由して、手動手順のシンボルを見つけることが可能だろうと思った...しかし、「ドキュメント」(読み取りコンサルティングの後:、ソースを研究しますデバッガを使ってステップオーバーし、多くの試行錯誤)私はこの時点では確実に実行できないという結論に達しました。 です。多くのシンボルテーブルの1つに "ClickProc"シンボルがありますが、ユニット名/シンボルでシンボルを修飾する信頼できる方法を見つけることができませんでした。

関連する問題