C#, Lua連携
Luaという汎用スクリプト言語ですが、最近いろんなところで目にするようになりました。ネットワークツールのNmap、インメモリDBのRedis、Vocaloidやゲームなど、幅広いところで使われています。VisualStudioのNuGetにもSharpLuaというパッケージがあったので、これを使ってC#との相互呼び出しをやってみようと思いました。
しかし、C#からはLuaを使えるのですが、その逆がうまくいかなかったので、LuaInterface(http://code.google.com/p/luainterface/)というものを使いました。
環境 : VisualStudio 2010 / Windows 7
C#コンソールアプリケーション
using System; using System.Collections.Generic; using System.Linq; using System.Text; using LuaInterface; using System.Reflection; namespace csConsLua { class Program { LuaInterface.Lua lua = new LuaInterface.Lua(); static void Main(string[] args) { Program p = new Program(); p.start(); Console.ReadLine(); } public void csFunc(string msg) { Console.WriteLine("msg : " + msg); } public void start() { lua.DoString("function luaFunc(msg) return string.format(\"msg : %s\", msg) end"); object[] o = this.lua.GetFunction("luaFunc").Call("from C#"); string s = (string)o[0]; Console.WriteLine(s); lua.RegisterFunction("csFunc", this, GetType().GetMethod("csFunc")); lua.DoString("csFunc(\"from Lua\")"); } } }
設定としては、http://luainterface.googlecode.com/files/LuaInterface_2.0.3.7z を解凍してできたdllを、「参照の追加」で読み込み、プロジェクトのプロパティで、「対象のフレームワーク」を ‘.Net Framework 3.5 Client Profile’ にしました。
これを実行した出力は、
msg : from C#
msg : from Lua
となります。
また、統合開発環境には、ZeroBraneStudio(https://github.com/pkulchenko/ZeroBraneStudio)というものがあり、学習に便利だと思いました。
次は、Redis/Azureあたりをやってみたいと思っています。