6

優れたPascalDWScriptを使用して、組み込みのスクリプト機能をまとめています。また、以下を使用して、独自のDelphi側のクラス定義(TDemo)をDWScriptに追加しました。

dwsUnit.ExposeRTTI( TDemo.ClassInfo  )

これは正しく機能し、プロパティとメソッドをすばやく追加するための優れた方法です。

同様の方法で既存のインスタンスを追加したいので、タイプTDemoのインスタンスFDemoを作成して、次の手順を実行しました。

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

これは呼び出すのに有望なルーチンに見えますが、初期化されていないユニットテーブルからAVを取得します。また、SVNソースの単体テストコードを調べて、この関数の使用法を確認しましたが、役に立ちませんでした。誰かが私に何を追加/変更すべきかを教えてもらえますか?

4

1 に答える 1

4

ExposeInstanceToUnitは、TdwsUnitテーブルの初期化内から使用する必要があります。サンプルコードについては、RTTIExposeTests/ExposeInstancesAfterInitTableを参照してください。動的インスタンスを直接公開できます。

もう1つのアプローチは、TdwsUnitコンポーネントのInstancesコレクションを使用することです。これにより、設計時のサポートが得られ、インスタンスとその存続期間をより詳細に制御できます。

また、スクリプトが誤動作した場合でも、公開したインスタンスが適切に動作することを確認する必要があります。ユーザーが公開したインスタンスを手動で破棄しようとした場合、そのインスタンスは破棄しないでください。デフォルトでは、ExposeRTTIはデストラクタをマップするため、eoNoFreeOnCleanupを指定してデストラクタを制限することをお勧めします。

編集:最近追加された最後のアプローチは、TdwsRttiConnectorを使用することです。これにより、基本的に、RTTIを介して到達可能なものすべてを公開および接続できます。これは、セットアップするコードの点では非常に軽量ですが、欠点は、コンパイル時のチェックがまったく行われないことです。

于 2011-08-26T06:15:29.977 に答える