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;
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
L'errore si verifica effettivamente durante la compilazione o è durante la chiamata "ExposeRTTI' immediatamente prima di esso? Sembra più probabile. –
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. –