Tôi đang cố tạo một dạng phương thức với dwscript. Im đăng ký biểu mẫu với ExposeRtti, sau đó thực thi tập lệnh nhưng nó không thành công trên "Stack overflow" trong Script.Compile. Có ai có một giải pháp cho lỗi này.Tràn ngăn xếp khi biên soạn một dwscript có chứa một TForm.Create (nil)
Tôi chắc chắn hy vọng tôi không phải đăng ký tất cả các thuộc tính TForm và chức năng bằng tay như chúng tôi đã đến với remobjects PascalScript, nó sẽ chúng ta xấu xí trong thời đại này, muốn tránh điều đó ..
thể dwscript làm điều này, hoặc là các hình thức đơn giản nằm ngoài phạm vi của dwscript (ở giai đoạn này?)?
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;
không chắc chắn nếu bạn có thể sử dụng một TForm, nó có tính chất mà bản thân cần phải được tiếp xúc trước lớp TForm, tại sao bạn không chỉ đơn giản là tạo ra một phiên bản nhẹ hơn của TForm bên trong một bộ sưu tập các lớp của TdwsUnit? – ComputerSaysNo
Có phải lỗi thực sự xảy ra trong quá trình biên dịch hay trong cuộc gọi 'ExposeRTTI' ngay trước khi nó xảy ra? Điều đó dường như có nhiều khả năng hơn. –
SO không liên quan gì đến TForm. Nó thậm chí sẽ xảy ra nếu bạn chỉ làm ExposeRTTI từ TObject và có một tập lệnh trống. –