◆◆ 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 にドラッグ&ドロップ そうなんですよ、こういうのが欲しかったんですよ。 ただ単に実行するだけ。愚直に。粛々と。そんなあなたが好き。 |