Happy My Life

日常とか技術とか

C#にLuaを組み込む

Mashup Madness!

現在開発しているソフトにスクリプト機能を組み込む事になった。こういった場合、自分で言語を作成する人もいるけど、大抵の場合既存の言語を移植する事が多い。

スクリプト機能で実現する機能なども考慮した結果、Lua(LuaInterface)を組み込むことにした。あちこちでよく耳にするこの言語の最大の特徴は、組み込み用言語として開発された事。組み込み用なので、軽量かつ他言語からの呼出も簡単にできるように設計されている。

組み込み用言語といえば、通常のスクリプト言語に比べて文法が貧弱で、いまいち使い勝手がよくない言語もあったりするけど、Luaは単体でもプログラミング言語として十分成り立つので、その点は問題ない。しかも.Net Frameworkも問題なく呼びだせるのでこれで十分(そのためのLuaInterfaceなのだが)

とここまではすんなり決ったのだが、その後、Lua(LuaInterface)をプログラムに組み込もうとサンプルコードを探したのだが、部分的な解説はそれなりに見つかるものの、ダウンロードしてそのままコンパイル、実行できるようなサンプルが見つからなかった。海外も含めて結構さがしたんだけどね。

ということで、あちこちの断片的な情報をかき集めて、C#からLua, LuaからC#を呼びだす簡単なサンプルを作成してみた。.NetFramework2.0なのでVS2005でも動作可能。サンプルの内容は、テキストボックスに変数に代入する値とLuaスクリプト本体を登録し実行すると、その実行結果の値がテキストボックスに表示されるという、ただそれだけ。

実行までの手順を一応書いておくと

実際に作ってみれば大したものじゃないんだけど、初めてチャレンジする人は右も左もわからないので、こういったサンプルがあると無いじゃ、そのあとの学習速度が全然違ってくると思う。 とりあえず、このサンプルを調べていろいろ改造していけば雰囲気は捕めるんじゃないかと。 いろいろ改造して遊んでみてください。

ちなみに開発環境は Visual C# 2008 Express Edition を使用してます。 コード一部抜粋

private void button1_Click(object sender, EventArgs e)
{
  // テーブル(連想配列)の作成
  lua.NewTable(“actress”);
  // テーブルの取得
  LuaTable actress = lua.GetTable(“actress”);
  // テーブルに値を代入する
  actress[“name”] = textBox1.Text;
  try
  {// luaスクリプト実行
  lua.DoString(sourceTextBox.Text);
  }
  catch (Exception ex)
  {
  MessageBox.Show(ex.Message);
  }
  // 実行結果をtextboxに代入する
  LuaTable resultTable = lua.GetTable(textBox2.Text);
  textBox4.Text = (string)resultTable[textBox3.Text];
}