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