2004 年 05 月 06 日
午後 11:56
STATUS: 故障中
● FTEzLua利用サンプルイメージ
/*
開発中の Lua 操作クラス「FTEzLua」の使用例
けっこうMFCべったり
*/
#include "stdafx.h"
#include "FTEzLua.h"
class MyClass {
public:
// テスト用関数
void Start() {
FTEzLua lua; // Luaクラスインスタンス
lua.Open(); // Open (lua_open();と同等)
ASSERT( lua.IsValid() );
lua.LoadScriptFile("test.lua"); // スクリプトファイルをロード
lua.LibOpen( FTEzLuaValue::LIB_BASE | FTEzLuaValue::LIB_MATH ); // 使用ライブラリを指定してOpen
lua.SetThis( this ); // thisポインタをセット (コールバック関数で取得するため)
lua.RegistFunc( "MyFunc" , MyFunc ); // コールバック関数登録
// スクリプト中の関数(LuaFuncを呼び出し。戻り値は FTEzLuaValue(複数値保持可能)に)
FTEzLuaValue lv = lua.CallFunc( "LuaFunc",2,2, FTEzLuaValue(123),FTEzLuaValue("ABC") );
TRACE("Result1=%d / Reault2=%s\n",(int)lv[0],(LPCSTR)lv[1] ):
// 新しいスレッドを生成( co_func関数を開始する )
FTEzLua lua2 = lua.NewThread("co_func");
FTEzLuaValue lv2;
while ( (lv2=lua2.Resume(1, FTEzLuaValue(123))).IsValid() ) { // スレッドを実行
// 実行結果が有効だった場合はスレッド継続
TRACE("Result1=%dx\n",(int)lv2 ):
}
lua2.Close(); // クローズ
lua1.Close();
}
// コールバック関数
static void MyFunc( lua_State *L ) {
FTEzLua lua( L ); // Attach
MyClass* p = lua.GetThis(); // Thisポインタを取得
int x = lua.GetParam(1); // 関数パラメータ1取得 (lua_tonumber( L, 1 );と同等)
int y = lua.GetParam(2); // 関数パラメータ2取得 (lua_tonumber( L, 2 );と同等)
int r = p->Calc(x,y); // thisポインタを利用して非staticメンバ関数をコール
lua.AddParam( FTEzLuaValue(r) ); // 戻り値を設定 ( lua_pushnumber( L , r );と同等 )
}
// 非staticメンバ関数
int Calc( int x,int y) {
return x * y;
}
}
● FTEzLuaValue利用サンプルイメージ
/*
「FTEzLua」で使用する値管理クラス「FTEzLuaValue」の使用例
関数の戻り値が複数になることに対応するため、Array的な使い方ができる。
*/
FTEzLuaValue lv(128);
FTEzLuaValue lv2("ABC");
FTEzLuaValue lv3(lv2);
double d = lv;
CString str = lv2;
int n = lv2;
TRACE("d=%f n=%d str=%s\n",d,n,str); // 出力:d=128.000000 n=0 str=ABC
TRACE("lv3=%d\n",(int)lv3); // 出力:lv3=0
TRACE("lv3=%s\n",(LPCSTR)lv3); // 出力:lv3=ABC
lv3.Add( FTEzLuaValue("ADDED") );
lv3.Add( FTEzLuaValue(9876) );
lv3.Add( FTEzLuaValue("LAST") );
lv3.Dump(); // 出力:0:ABC 1:ADDED 2:9876.000000 3:LAST
lv3[2]=4567;
lv3.Dump(); // 出力:0:ABC 1:ADDED 2:4567.000000 3:LAST
TRACE("lv3[2]=%d lv3.count=%d\n",(int)lv3[2] , lv3.Count() ); // 出力:lv3[2]=4567 lv3.count=4
FTEzLuaValue lv4;
lv4=lv3;
lv4.Dump(); // 出力:0:ABC 1:ADDED 2:4567.000000 3:LAST
FTEzLuaValue lv5 = FTEzLuaValue( "dsfdvs",0, 123,"ZZZ",1.01,999,lv4,"END"); // 複数の値で初期化 引数(フォーマット,ダミー, 値1,値2 ... )、フォーマット(d=int f=double s=LPCSTR v=FTEzLuaValue)
lv5.Dump(); // 出力:1:123.000000 2:ZZZ 3:1.010000 4:999.000000 5:ABC 6:ADDED 7:4567.000000 8:LAST 9:END
処理中...