2011-08-25 18 views
6

Tôi đang tập hợp khả năng tập lệnh được tích hợp bằng cách sử dụng số Pascal DWScript xuất sắc. Tôi cũng đã thêm định nghĩa lớp Delphi của riêng mình (TDemo) vào DWScript bằng cách sử dụng:Cách tốt nhất để hiển thị một cá thể lớp trong DWScript

dwsUnit.ExposeRTTI(TDemo.ClassInfo ) 

Điều này chỉ hoạt động và là cách tuyệt vời để thêm nhanh các thuộc tính và phương pháp.

Tôi cũng muốn thêm một thể hiện theo một cách tương tự, vì vậy tôi đã tạo ra ví dụ của tôi FDemo loại TDemo và sau đó thực hiện:

dwsUnit.ExposeInstanceToUnit('Demo', 'TDemo', FDemo); 

này trông một thói quen đầy hứa hẹn để gọi nhưng tôi nhận được một AV từ một bảng đơn vị uninitialised. Tôi cũng đã nhìn vào mã kiểm tra đơn vị của nguồn SVN để xem việc sử dụng hàm này nhưng không có kết quả. Bất cứ ai có thể chỉ cho tôi những gì tôi nên thêm/thay đổi?

+0

Có thể thêm một số mã vào phần 'khởi tạo' của đơn vị đó? – Johan

Trả lời

4

ExposeInstanceToUnit phải được sử dụng từ bên trong khởi tạo bảng TdwsUnit, xem RTTIExposeTests/ExposeInstancesAfterInitTable cho một số mã mẫu. Nó cho phép hiển thị trực tiếp các cá thể động.

Cách tiếp cận khác là sử dụng bộ sưu tập Instances của một thành phần TdwsUnit, bạn nhận được hỗ trợ thiết kế thời gian và nhiều quyền kiểm soát hơn đối với các phiên bản của bạn và tuổi thọ của chúng.

Cũng xin lưu ý rằng bạn phải đảm bảo rằng các trường hợp bạn hiển thị sẽ hoạt động đúng cách ngay cả khi tập lệnh vi phạm, f.i. khi người dùng cố gắng tự hủy một phiên bản mà bạn đã tiếp xúc, và cá thể đó không nên bị hủy. Theo mặc định ExposeRTTI sẽ ánh xạ các destructors, vì vậy bạn có thể muốn hạn chế điều đó bằng cách chỉ định eoNoFreeOnCleanup.

chỉnh sửa: cách tiếp cận cuối cùng được thêm gần đây là sử dụng TdwsRttiConnector, về cơ bản cho phép hiển thị và kết nối với bất kỳ thứ gì có thể truy cập thông qua RTTI. Đó là rất nhẹ về mã để thiết lập, nhưng nhược điểm là bạn không nhận được bất kỳ hình thức kiểm tra thời gian biên dịch.

+0

Cảm ơn Eric, điều đó rất hữu ích. –

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