FastScript + Delphiの1つの機能

FastScriptを使用してDelphiで1つの小さなプロジェクトを開発するとき、彼らは1つの非自明な機能に遭遇しました。

この機能が有用であり、開発時間を節約できることを誰かが見つけてくれることを願っています。



このプロジェクトではZeosLibを使用し、追加のレイヤーを作成するために次の構成を作成しました。



type TMyQuery = TZQuery;
      
      







つまり、TMyQuery型がTZQueryの同義語として宣言され、この型のオブジェクトがプログラムで作成されました。

FastScriptプロジェクトにバインドして、プロジェクトを再コンパイルせずに変更できる(および必要な)ブロックに機能の一部を転送し始めるまで、すべてがうまくいきました。



スクリプト内では、データベースクエリの使用が暗示されています。

そのため、ドキュメントに従って、スクリプトエンジンを初期化するときに、クラスを追加しました。



 TFunctions = class(TfsRTTIModule) private ... public constructor Create(AScript: TfsScript); override; end; constructor TFunctions.Create(AScript: TfsScript); begin inherited Create(AScript); with AScript do begin ... AddClass(TMyQuery ,'TDataSet'); ... end; end;
      
      







スクリプト内で型の変数を宣言しようとすると、彼らはメッセージを受け取りました:



: 10:4: : 'TMyQuery'







同時に、スクリプトにインポートされた他のクラスは静かに機能しました。 はい、そしてライン自体に:



  AddClass(TMyQuery ,'TDataSet');
      
      







コンパイル時も実行時もエラーと警告はありませんでした。

問題を数時間検索した結果、FastScriptは別のクラスと同義であると説明されているクラスを正しくインポートできなかったことが判明しました。



タイプの説明を次のように変更した後:



 type TMyQuery = class(TZQuery);
      
      







(つまり、TMyQueryは同義語ではなく、TZQueryの子孫です)

すべてが所定の位置に収まりました。



ソフトウェアバージョン:Delphi 2010、FastScript4。他のバージョンおよび組み合わせではテストされていません。



All Articles