Hello Lua

そうだ、スクリプトを使おう、と思い立ちました。

まず思いついたのは今流行りのRubyでしたが、
組み込んで使うとなるとライセンス的にどうなのかな、
という感じがしたので、Luaを検討しました。

ポイント

  • 組み込みやすい
  • LuaComを使えば、COMも使える
  • 無名関数が使える
  • 強力なテーブル型
  • 連想配列が使える

LuaComの注意

LuaComでは、MSVCでそのまま使うとメモリリークが発生するようです。

ソースを見て見ると、クリーンアップ関数であるluacom_cleanから呼び出されているLuaBeans::Clean()メソッドの処理が足りないようでした。

変更前のLuaBeans::Cleanメソッド
void LuaBeans::Clean()
{
  free(LuaBeans::tag_name);
  free(LuaBeans::udtag_name);
}
変更後のLuaBeans::Cleanメソッド
void LuaBeans::Clean()
{
	if ( module_name )
	{
		free( (void* )module_name );
		module_name = NULL;
	}
	if ( tag_name )
	{
		free( tag_name );
		tag_name = NULL;
	}
	if ( udtag_name )
	{
		free( udtag_name );
		udtag_name = NULL;
	}
}

こうすると、メモリリークが発生しなくなりました。