2012-05-15 55 views
5

我試圖用dwscript創建一個模態表單。 Im使用ExposeRtti註冊表單,然後執行腳本,但在Script.Compile期間它在「堆棧溢出」上失敗。有沒有人有這個錯誤的解決方案。編譯包含TForm的dwscript時堆棧溢出(零)

我當然希望我沒有給所有的TForm的屬性和功能手動像我們已經註冊使用的RemObjects PascalScript,它將我們醜陋在這個時代,要避免..

能dwscript做到這一點,或者只是超出了dwscript的範圍(在這個階段?)?

procedure TMainForm.Button1Click(Sender: TObject); 
var AdwsProgramExecution: IdwsProgramExecution; 
    ADelphiWebScript: TDelphiWebScript; 
    AdwsProgram: IdwsProgram; 
    AdwsUnit: TdwsUnit; 
begin 
    AdwsUnit := TdwsUnit.Create(nil); 
    ADelphiWebScript := TDelphiWebScript.Create(nil); 
    try 
    AdwsUnit.UnitName := 'ShowModalTest'; 
    AdwsUnit.Script := ADelphiWebScript; 
    AdwsUnit.ExposeRTTI(TypeInfo(TObject)); //Otherwise GetOnAlignInsertBefore error when 'compiling' 
    AdwsUnit.ExposeRTTI(TypeInfo(TForm)); //Want t ocreate a form 
    AdwsProgram := ADelphiWebScript.Compile('procedure TestShowModal; begin TForm.Create(nil).ShowModal; end; end.'); //Stack overflow 
    if AdwsProgram.Msgs.Count = 0 then 
    begin 
     AdwsProgramExecution := AdwsProgram.Execute; 
     MEResult.Lines.Text := AdwsProgramExecution.Result.ToString; 
    end 
    else 
     MEResult.Lines.Text := AdwsProgram.Msgs.AsInfo; 
    finally 
    ADelphiWebScript.Free; 
    AdwsUnit.Free; 
    end; 
end; 
+1

不知道,如果你可以使用一個TForm的,它有其自身需要TForm的類之前公開的屬性,你爲什麼不只是創造一個更輕量級版本TdwsUnit的類集合中的TForm? – ComputerSaysNo

+0

在編譯過程中實際發生的錯誤,還是在它之前的'ExposeRTTI'調用期間?這似乎更有可能。 –

+0

SO與TForm無關。它甚至會發生,如果你只從TObject執行ExposeRTTI並且有一個空的腳本。 –

回答

0

顯然dwscript不能通過擴展的RTTI正確註冊任何東西,除非它是簡單的類。這不是我想要的腳本引擎,所以(現在)dwscript完全是圖表,除非它能夠註冊複雜的結構。它非常有前途,但在這個軟件包完整且可用之前還有很長的路要走。

現在回pascalscript,paxcompiler或tmsscript