TOP > プログラム関連 > Lua > Luaスクリプトを実行するための簡易アプリ

[English]

◆◆ Luaスクリプトを実行するための簡易アプリ ◆◆
Luaをちょっと試してみたいなー、と思ったとき、私の頭に なんとなく思い浮かんだ実行方法はこうです。

1. テキストエディタで、Luaのソースを書く
2. 書いたモノを「Luaスクリプト」として、どうにかして実行

「どうにかして実行」ってところで思考が停止してるわけですけど、 わかりますよね? つまり、どこかにファイルをドラッグ&ドロップすると実行してくれる、とかですよ。うんうん。

そんなのあったらいいなーって思ったんですけど、 どこにあるの? ここにあるよ。おお、やったね!
◆◆ ソース全文 ◆◆
Luaのバージョンは5.1.4です。
VC++2010Expressでビルドしました。
				#include <stdio.h>
				#include <lua.hpp>
				#include <string>
				#include <windows.h>

				using namespace std;

				//=========================================================
				// メイン関数
				//=========================================================
				int main (int argListSize, char *argList[]) {
					
					///// 実行時引数をLuaファイル名のつもりで取得
					string fileAllPath = ( argListSize > 1 ) ? argList[1] : "";

					///// ファイルが渡されてなければ終了
					if ( fileAllPath == "" ) {
						return 0;
					}

					///// 渡されたファイルパスを解析
					unsigned found = fileAllPath.find_last_of("/\\");
					string path = fileAllPath.substr ( 0, found );
					string file = fileAllPath.substr ( found + 1 );

					///// 実行するファイルがある場所をカレントディレクトリとする
					SetCurrentDirectory ( path.c_str() );

					///// Lua開始
				    lua_State *lua = luaL_newstate();
					luaL_openlibs(lua);

					///// Lua ファイルを読み出して実行。
					if (luaL_dofile (lua, file.c_str() ) ) {

						// エラーメッセージを表示
						string error_message = lua_tostring(lua, -1);
					
						printf ( "luaL_dofile: %s\n", error_message.c_str());
					}

					///// 止まって欲しいですよね? そうでもない? そうですかー。
					getchar();

					///// 終了
				    lua_close(lua);
					return EXIT_SUCCESS;
				}
				 
				
◆◆ 解説 ◆◆
何をしているか?
要点は2つです。

1. コマンドライン引数を取得してファイル名だと思い込む (行13~24)
2. カレントディレクトリをそのファイルの位置に移動する (行27)
3. ファイルをLuaスクリプトとして読み込んで実行 (行29~40)

あ、3つになった。ごめんね。
2番目はなくてもいいけど、Luaスクリプト内で外部ファイルを require しているときに少し便利かも。

3番目でやっとLua用のコードですね。
よくあるサンプルそのままです。
実はよくわからずにコピペしてるので、本当は間違ってるのかも。
「本当」って何? ねぇ、誰か教えて?
◆◆ ダウンロード ◆◆
うちの環境でビルドしたものです。
SimpleLuaExecuter.zip

動かなかった? 上のソースをあなたの環境でビルドしてみてね。
挙動を変えたい? ソースを書き換えてあなたの環境でビルドしてみてね。
幸せになりたい? 私にはお手伝いできそうにないです。ごめんね。

ワンポイントアドバイス。
ビルドするには Lua本体が別途必要だよ。
それと、あなたの意志も必要だよ。
それが生きてるってことだよ。
何の話?
◆◆ 使い方 ◆◆
1. テキストエディタで Luaスクリプトを書く
2. 書いたスクリプトファイルを SimpleLuaExecuter.exe にドラッグ&ドロップ

そうなんですよ、こういうのが欲しかったんですよ。
ただ単に実行するだけ。愚直に。粛々と。そんなあなたが好き。