組み込み機器の通信部分を試験する試験装置を
WindowsXPの.NETFrameworkで作成することに
なりました。
エージング機能にはスクリプト言語を内蔵して
自由にエージングシナリオ(エージングパターン)を
設定できるのが仕様の目玉です。
そこで.NETFrameworkでスクリプトエンジンを
探していたところ、CLR上でスクリプト言語を
動作させるためにDLRというのがあり、DLR上に
は、既にIronPythonとIronRubyが実装されていることが
分かりました。
ちょうど、別件でRuby on Railsの勉強をしていたので
迷わずIronRubyをインストールして検証してみました。
目的
- 自作アプリからRubyスクリプトを実行
- Rubyスクリプトから自作アプリのオブジェクトインスタンスを操作
(これ、重要)。
手順
- まずは下のサイトからIronRubyのモジュール(ironruby-1.0.zip)を
ダウンロードして解凍。
http://ironruby.codeplex.com/ - 解凍してできたironruby-1.0\binディレクトリから
VisualStudioで作ったプロジェクトに以下の参照を追加。
IronRuby.dll
IronRuby.Libraries.dll
Microsoft.Scripting.dll
Microsoft.Scripting.Core.dll - これで下のようなサンプルで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); } } }
使い方次第で、ものすごく強力な付加機能を
アプリに追加できるのではないでしょうか。