2012-05-15 8 views
5

Sto provando a creare un modulo modale con dwscript. Im registrare il modulo con ExposeRtti, quindi eseguire lo script ma non riesce su un "overflow dello stack" durante Script.Compile. Qualcuno ha una soluzione per questo errore.Overflow dello stack durante la compilazione di un dwscript contenente un TForm.Create (nil)

ho sicuramente spero non dovete registrare tutte le proprietà e le funzioni TForm manualmente come dobbiamo con RemObjects PascalScript, sarebbe abbiamo brutta in questa era, come per evitare che ..

Può dwscript fare questo, o sono forme che vanno oltre lo scopo di dwscript (in questa fase?)?

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

non è sicuro se è possibile utilizzare un TForm, ha proprietà che si ha la necessità di essere esposti prima della classe TForm, perché non è sufficiente a creare una versione più leggera di TForm nella collezione di classi di TdwsUnit? – ComputerSaysNo

+0

L'errore si verifica effettivamente durante la compilazione o è durante la chiamata "ExposeRTTI' immediatamente prima di esso? Sembra più probabile. –

+0

Il SO non ha nulla a che fare con TForm. Succede anche se si esegue ExposeRTTI da TObject e si dispone di uno script vuoto. –

risposta

0

Apparentemente dwscript Non è possibile registrare nulla correttamente tramite estesa RTTI a meno che non sono semplici classi. Questo non è quello che avevo in mente per un motore di script, quindi (per ora) dwscript è completamente del grafico a meno che non possa rtti registrare strutture complicate. È molto promettente, ma c'è ancora molta strada da fare prima che questo pacchetto sia completo e utilizzabile.

Per ora torna a PascalScript, paxCompiler o tmsscript