青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

的筆記

隨時隨地編輯

lua-c筆記

參考文檔

lua所有的一切盡在一本小冊:Lua 5.0 Reference Manual 
   pdf: http://www.lua.org/ftp/refman-5.0.pdf.
   html:http://www.lua.org/manual/5.1/

LuaPlus Callback Dispatcher 1.00   
   http://wwhiz.com/LuaPlus/LuaPlusCallDispatcher.html

LuaPlus for Lua 5.01 Distribution   
   http://wwhiz.com/LuaPlus/LuaPlus.html

Lua:Tutorials:Scripting with LuaPlus and Cpp   
   http://www.gpwiki.org/index.php/Lua:Tutorials:Scripting_with_LuaPlus_and_Cpp
lua維基
   http://zh.wikipedia.org/wiki/Lua 
   http://en.wikipedia.org/wiki/Lua_(programming_language)

C++中使用Lua腳本 和lua中調用c的方法
   http://www.cnweblog.com/fly2700/archive/2010/02/09/282920.html

Calling C++ Functions From Lua
http://gamedevgeek.com/tutorials/calling-c-functions-from-lua/


設置lua環境

extern "C"
{
    #include 
"lua.h"
    #include 
"lualib.h"
    #include 
"lauxlib.h"
}


load script

//--test.lua
//function add(x,y)
//return x+y
//end

//print("1+2" , add(1,2))

int _tmain(int argc, _TCHAR* argv[])
{
    lua_State
* L = lua_open();    
    luaopen_base(L);    
    
/* load the script */
    luaL_dofile(L, 
"test.lua");    // 讀取Lua源文件到內存編譯
    lua_close( L);
    
return 0;
}

 

call lua

//--hellow.lua
//function add(x,y)
//print("x+y=" , x+y );
//return
//end
//
//--print(dddd)
//add(1 , 2)

double fun(lua_State* L ,  double x, double y )
{
    
double ret;
    lua_getglobal( L, 
"add");      
    lua_pushnumber( L,x);         
    lua_pushnumber( L,y);         
    lua_call( L, 
21);          
    ret 
= lua_tonumber( L, -1);    
    lua_pop( L, 
1);              
    
return ret;
}

int _tmain(int argc, _TCHAR* argv[])
{
    
int error;
    
// 創建Lua接口指針
    lua_State* L = lua_open();    
    
// 加載Lua基本庫
    luaopen_base(L);    
    
// 加載Lua通用擴展庫
    luaL_openlibs(L);     

    
/* load the script */
    error 
= luaL_dofile(L, "test.lua");

    srand( time(
0) );
    
while(1)
    
{
        
int alpha = rand();
        
int beta = rand();
        
int ret = fun(L , alpha , beta );
        printf(
"%d " , ret);
    }


    lua_close( L);
    
return 0;
}

 

lua call c

//--luacallc.lua
//avg = average(20 , 30 , 4)
//print("lua got average value:" , avg)

//被lua調用的方法
static int average(lua_State * L)
{
    
/* get number of arguments */
    
int n = lua_gettop(L);
    
int sum=0;
    
/* loop through each argument */
    
for (int i = 1; i <= n; i++)
    
{
        
/* total the arguments */
        sum 
+= lua_tonumber(L, i);
    }


    lua_pushnumber(L, sum 
/ n);
    
/* return the number of results */
    printf(
"c average called. [ok]\n");
    
return 1;
}


int _tmain(int argc, _TCHAR* argv[])
{
    
int error;
    
// 創建Lua接口指針
    lua_State* L = lua_open();    
    
// 加載Lua基本庫
    luaopen_base(L);    
    
// 加載Lua通用擴展庫
    luaL_openlibs(L);     

    lua_register(L, 
"average", average);
    
/* load the script */
    error 
= luaL_dofile(L, "luacallc.lua");    // 讀取Lua源文件到內存編譯

    lua_close( L);
    
return 0;
}

 

lua call C++ object(lua way)

//--luacallcplusfun.lua
//
//o = obj();
//o:set( 50 );
//o:get();
//print("lua got average value:" , avg)

class obj
{
public:
    obj() : val( 
0 ) {}

    
void   setdouble v )
    

        val 
= v;
    }

    
double getvoid )  
    

        
return val;
    }


private:
    
double val;
}
;

class lua_bind
{
public:
    
static void reg( lua_State* L )
    
{
        lua_newtable( L );
        
int tbl = lua_gettop( L );

        luaL_newmetatable( L, 
"obj" );
        
int meta_tbl = lua_gettop( L );

        lua_pushliteral( L, 
"__metatable" );
        lua_pushvalue( L, tbl );
        lua_settable( L, meta_tbl );

        lua_pushliteral( L, 
"__index" );
        lua_pushvalue( L, tbl );
        lua_settable( L, meta_tbl );

        lua_pushliteral( L, 
"__gc" );
        lua_pushcfunction( L, gc );
        lua_settable( L, meta_tbl );

        lua_pop( L, 
1 );
        luaI_openlib( L, 
0, functions, 0 );

        lua_pop( L, 
1 );
        lua_register( L, class_name, build );
    }


    
static int build( lua_State* lua )
    
{
        obj
* p = new obj();
        
*void** )( lua_newuserdata( lua, sizeofvoid* ) ) ) = p;

        luaL_getmetatable( lua, class_name );
        lua_setmetatable( lua, 
-2 );

        cout 
<< "build object, val is 0" << endl;
        
return 1;
    }


    
static int gc( lua_State* lua )
    
{
        obj
* p = ( obj* )( *void** )( lua_touserdata( lua, 1 ) ) );
        delete p;

        cout 
<< "object gc" << endl;
        
return 0;
    }


    
static int set_val( lua_State* lua )
    
{
        obj
* p = ptr( lua, 1 );
        
double val = luaL_checknumber( lua, 2 );

        p
->set( val );

        cout 
<< "set value to " << val << endl;
        
return 0;
    }


    
static int get_val( lua_State* lua )
    
{
        obj
* p = ptr( lua, 1 );
        
double val = p->get();

        lua_pushnumber( lua, val );

        cout 
<< "get value is " << val << endl;
        
return 1;
    }


    
static obj* ptr( lua_State* lua, int narg )
    
{
        luaL_checktype( lua, narg, LUA_TUSERDATA );
        
void* ud = luaL_checkudata( lua, narg, class_name );

        
if( ud )
            
return *( obj** )ud;

        luaL_typerror( lua, narg, class_name );
        
return 0;
    }


    
static const char     class_name[];
    
static const luaL_reg functions[];
}
;

const char lua_bind::class_name[] = "obj";

const luaL_reg lua_bind::functions[] =
{
    
"set", lua_bind::set_val },
    
"get", lua_bind::get_val },
    
{     0,                 0 }
}
;

int _tmain(int argc, _TCHAR* argv[])
{
    lua_State
* L = lua_open();    

    lua_bind::reg( L );

    luaL_dofile( L, 
"luacallcplusobj.lua" );

    lua_close( L);

    
return 0;
}

 

lua call C++ object(luaplus way)

 

posted on 2011-07-01 19:55 的筆記 閱讀(1287) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美国产精品| 午夜精品亚洲一区二区三区嫩草| 久久理论片午夜琪琪电影网| 国产噜噜噜噜噜久久久久久久久| 亚洲自拍偷拍福利| 亚洲专区欧美专区| 国产视频自拍一区| 蜜桃久久av| 欧美福利一区| 亚洲综合色婷婷| 先锋影音久久久| 在线免费观看一区二区三区| 欧美黄色影院| 国产精品盗摄一区二区三区| 欧美一区二区三区久久精品| 久久国产日韩| 亚洲精品欧洲| 亚洲一区二区三区四区视频| 国内视频精品| 亚洲美女精品一区| 国产欧美日韩在线播放| 免费观看成人| 国产精品久久久久久户外露出| 欧美亚洲专区| 免费在线亚洲欧美| 性欧美暴力猛交69hd| 久久综合狠狠| 午夜精品理论片| 美女精品视频一区| 亚洲在线观看| 欧美凹凸一区二区三区视频| 亚洲欧美一区二区精品久久久| 久久久国产成人精品| 宅男噜噜噜66一区二区| 久久精品夜色噜噜亚洲a∨ | 久久国产精彩视频| 亚洲精品中文字幕在线| 先锋资源久久| 中日韩高清电影网| 久久视频精品在线| 午夜精品福利电影| 欧美精品午夜| 免费视频一区二区三区在线观看| 国产精品激情电影| 欧美激情一区二区三区成人| 国产一区二区中文| 亚洲天天影视| 99伊人成综合| 欧美成人一品| 美女精品国产| 韩国女主播一区二区三区| 亚洲视频在线观看视频| 亚洲理论在线观看| 免费不卡在线观看| 久久天堂成人| 国内精品一区二区三区| 先锋资源久久| 欧美中文字幕在线观看| 国产精品老女人精品视频| 亚洲欧洲精品一区| 最新国产の精品合集bt伙计| 久久久久久夜| 欧美成人精品三级在线观看| 在线播放日韩专区| 久久精品女人| 欧美大片免费| 亚洲日本乱码在线观看| 欧美高清视频一二三区| 欧美岛国在线观看| 亚洲激精日韩激精欧美精品| 美女主播一区| 亚洲国产免费看| 夜夜爽www精品| 欧美日韩综合一区| 亚洲一区二区欧美| 欧美亚洲一区二区在线观看| 国产女人精品视频| 欧美中文在线字幕| 美女视频黄免费的久久| 亚洲国产一区二区三区青草影视| 久久综合色播五月| 91久久视频| 亚洲欧美激情在线视频| 国产婷婷色一区二区三区在线| 欧美在线观看日本一区| 美女视频网站黄色亚洲| 亚洲激情国产| 欧美亚洲成人精品| 欧美影院成人| 亚洲国产日韩欧美在线图片| 正在播放欧美视频| 国产日韩欧美综合| 另类人畜视频在线| 99国内精品| 久久久久久久久久码影片| 亚洲国产美女| 国产精品久久久久影院亚瑟| 性18欧美另类| 亚洲青色在线| 久久精品一二三| 亚洲精选国产| 国产人久久人人人人爽| 免费影视亚洲| 亚洲免费视频观看| 亚洲大片av| 久久aⅴ乱码一区二区三区| 亚洲国产导航| 国产老女人精品毛片久久| 久久影视精品| 亚洲欧美日韩综合一区| 亚洲第一福利视频| 欧美在线你懂的| 亚洲精品综合| 黑人一区二区| 国产精品日韩欧美一区| 久久综合色一综合色88| 亚洲综合日本| 亚洲美女在线视频| 欧美福利在线| 久久视频精品在线| 亚洲欧美日韩天堂| 99精品国产在热久久婷婷| 一区二区三区在线视频观看| 国产精品成人一区二区| 欧美国产大片| 老司机精品导航| 欧美伊人精品成人久久综合97| 99www免费人成精品| 欧美激情精品久久久久久变态| 欧美综合激情网| 亚洲欧美清纯在线制服| 99国产精品国产精品毛片| 亚洲国产毛片完整版| 伊人狠狠色丁香综合尤物| 国产欧美 在线欧美| 国产精品极品美女粉嫩高清在线 | 新狼窝色av性久久久久久| av成人免费| 日韩亚洲欧美中文三级| 亚洲国产精品第一区二区三区| 欧美11—12娇小xxxx| 久久综合网hezyo| 久久另类ts人妖一区二区| 性娇小13――14欧美| 亚洲欧美日韩在线播放| 午夜精品成人在线视频| 午夜精品福利一区二区蜜股av| 亚洲一区二区网站| 亚洲一区视频在线| 亚洲一区二区三区免费在线观看 | 国产精品专区一| 国产精品一区在线观看你懂的| 国产精品久久久久久福利一牛影视| 欧美日韩在线电影| 欧美日韩专区| 国产精品美女一区二区在线观看| 国产精品sss| 国产日本精品| 在线免费高清一区二区三区| 亚洲国产视频一区二区| 亚洲免费av网站| 亚洲系列中文字幕| 欧美专区在线播放| 美女黄色成人网| 亚洲欧洲日本mm| 亚洲午夜电影| 久久国产欧美| 欧美人与禽猛交乱配| 欧美午夜美女看片| 国产一区观看| 亚洲精品一区二| 亚洲欧美综合国产精品一区| 久久精品99久久香蕉国产色戒 | 亚洲一区二区三区精品动漫| 性欧美xxxx大乳国产app| 久久一日本道色综合久久| 欧美国产日韩一区二区在线观看 | 欧美一区二区精品| 免费看精品久久片| 一本久久a久久精品亚洲| 欧美一级久久久久久久大片| 欧美不卡在线| 国产欧美精品一区二区色综合| 一区二区视频免费完整版观看| 亚洲精品一二三| 久久国产精品久久久久久久久久| 欧美成人xxx| 亚洲在线观看视频| 欧美成人一区二免费视频软件| 国产精品网曝门| 99国产精品久久久久久久| 欧美在线视频免费观看| 亚洲片区在线| 久久se精品一区二区| 国产精品99一区| 亚洲美女区一区| 欧美jjzz| 久久精品水蜜桃av综合天堂| 欧美午夜电影在线| 亚洲毛片av在线|