自作アプリへのスクリプトエンジン埋め込み

組み込み機器の通信部分を試験する試験装置を
WindowsXPの.NETFrameworkで作成することに
なりました。
エージング機能にはスクリプト言語を内蔵して
自由にエージングシナリオ(エージングパターン)を
設定できるのが仕様の目玉です。
そこで.NETFrameworkでスクリプトエンジンを
探していたところ、CLR上でスクリプト言語を
動作させるためにDLRというのがあり、DLR上に
は、既にIronPythonとIronRubyが実装されていることが
分かりました。
ちょうど、別件でRuby on Railsの勉強をしていたので
迷わずIronRubyをインストールして検証してみました。

目的


  1. 自作アプリからRubyスクリプトを実行

  2. Rubyスクリプトから自作アプリのオブジェクトインスタンスを操作
    (これ、重要)。

手順


  1. まずは下のサイトからIronRubyのモジュール(ironruby-1.0.zip)を
    ダウンロードして解凍。
    http://ironruby.codeplex.com/

  2. 解凍してできたironruby-1.0\binディレクトリから
    VisualStudioで作ったプロジェクトに以下の参照を追加。
    IronRuby.dll
    IronRuby.Libraries.dll
    Microsoft.Scripting.dll
    Microsoft.Scripting.Core.dll

  3. これで下のようなサンプルでRubyスクリプトから自作アプリの
    オブジェクトを操作できます。
    下記のサンプルでTestクラスのFunc関数にブレークポイント
    設定して実行すると、メインスレッドがFunc関数を実行することが
    分かります。


    
    namespace IronRubyTest
    {
    class Test
    {
    private string str_;
    public void Func(string str)
    {
    str_ = str;
    }
    }
    class Program
    {
    static void Main(string[] args)
    {
    var eg = IronRuby.Ruby.CreateEngine();
    var src = eg.CreateScriptSourceFromString(
    @"t.Func ""abc""");
    var scp = eg.CreateScope();
    var t = new Test();
    scp.SetVariable(
    "t",
    t);
    src.Execute(scp);
    }
    }
    }
    



使い方次第で、ものすごく強力な付加機能を
アプリに追加できるのではないでしょうか。

Author: kachi

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です