高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

DMonkeyを使ってみる

 お気に入りの色に、DMonkeyを組み込んでみました。色をいじくる(反転色にするとか)項目を全部スクリプトに押し込んでしまおうという考えです。new Colors.R、new Colors.G、new Colors.Bとか言う感じ。最初バージョンアップしようとしてたときには、PPAでやろうとしていたっけ。まあ、この場合はPPAの方が都合がいいのかもしれませんが…。
 DMonkeyの実装初体験でもあるわけですが、思った以上にすんなりできちゃって、ちょっとびっくりです(まあ、当然ですが)。
気づいたことも少々。組み込みオブジェクトですが、ヘルプのようにTJObjectのコンストラクタでRegistNameなんかしなくてもいいみたいですね、ちゃんとImportObjectで登録しておけば呼び出し可能みたいです。あと、メソッドはPublishedにしても、やっぱり登録しなくてはいけないようです。
 あとは内部で例外をじゃんじゃん処理しているようなので(exceptで処理されるので、報告はされない例外を、たくさん発生させている)、そのソフトをデバッグ環境で使う場合はいちいちIDEに制御が移ってしまって面倒です。
Delphi@WCIMHで見つけた情報ですが、ExceptionClassをEAbortにしてやるといいようです。ブレークポイントのオプションも、ブレークさせなければ(停止条件にFalseと指定するなどして、ブレークで止めないようにしたとしても)無効みたいですからね。

var E: TClass;
begin
  with TDMonkey.Create(Self) do
  try
    E := ExceptionClass;
    ExceptionClass := EAbort;
    try
      ImportObject('Colors', TColorCfg);
      CompileFile(ScriptDir + TMenuItem(Sender).Hint);
      Run([R, G, B]);
    finally
      ExceptionClass := E;
    end;
  finally
    Free;
  end;
end;

 あと、オブジェクト(この場合はColorsとか)の動作を反映させたいときは、そのクラスのデストラクタを使うといいようです。
えと…あと、staticなメソッドという概念は、DMonkeyにはないみたいですね、動的にならできるのかもしれませんが、基本的にstaticを目的とした関数しかなくても、newしてもらう必要がある…みたい?