2012-05-15 18 views
5

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; 
+1

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

+0

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

+0

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

Trả lời

0

Rõ ràng dwscript không thể đăng ký bất kỳ điều gì đúng cách qua RTTI mở rộng trừ khi đó là các lớp đơn giản. Đó không phải là những gì tôi đã có trong tâm trí cho một động cơ kịch bản, vì vậy (bây giờ) dwscript là hoàn toàn của biểu đồ, trừ khi nó có thể rtti đăng ký phức tạp stuctures. Nó rất hứa hẹn nhưng vẫn có cách để đi trước khi gói này là hoàn chỉnh và có thể sử dụng.

Đối với bây giờ trở lại pascalscript, paxcompiler hoặc tmsscript

Các vấn đề liên quan