2011-08-25 27 views
6

我正在使用優秀的Pascal DWScript將內置腳本功能放在一起。我也我自己的Delphi端類定義(TDemo)使用添加到DWScript:如何最好地在DWScript中公開類實例

dwsUnit.ExposeRTTI(TDemo.ClassInfo ) 

這只是工作,是快速增加的屬性和方法的好方法。

我也希望以類似的方式加入現有的實例,所以我創建我的實例FDemo型TDemo,然後執行:

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

這看起來有前途的程序來調用,但我得到一個AV來自未初始化的單元表。我也查看過SVN源代碼的單元測試代碼,看看這個函數的用法,但無濟於事。任何人都可以指出我應該添加/更改什麼?

+0

也許添加一些代碼到該單元的「初始化」部分? – Johan

回答

4

必須從TdwsUnit表初始化中使用ExposeInstanceToUnit,有關示例代碼,請參閱RTTIExposeTests/ExposeInstancesAfterInitTable。它允許直接暴露動態實例。

另一種方法是使用TdwsUnit組件的集合,您可以獲得設計時支持以及對您的實例及其生命週期的更多控制。

另外請記住,您必須確保您公開的實例即使腳本行爲異常,也會正常運行,f.i.當用戶嘗試手動銷燬您公開的實例時,該實例不應被銷燬。默認情況下,ExposeRTTI將映射析構函數,因此您可能需要通過指定eoNoFreeOnCleanup來限制它。

編輯:最近添加的最後一種方法是使用TdwsRttiConnector,它基本上允許公開和連接任何可通過RTTI訪問的內容。這在代碼設置方面非常輕量級,但缺點是您沒有得到任何形式的編譯時檢查。

+0

謝謝Eric,這非常有用。 –

相關問題