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

的筆記

隨時隨地編輯

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>
            欧美成人综合网站| 国产精品亚发布| 亚洲福利视频一区| 久久综合狠狠综合久久综青草| 久久成人精品视频| 午夜欧美不卡精品aaaaa| 国产亚洲精品一区二区| 久久久久亚洲综合| 久久亚洲视频| 99国产精品99久久久久久| 亚洲精品欧美日韩| 国产精品自拍在线| 裸体女人亚洲精品一区| 裸体一区二区三区| 亚洲亚洲精品在线观看| 午夜精品一区二区三区四区| 国产一区日韩一区| 亚洲成人在线网站| 欧美日韩一区三区| 久久久综合网站| 欧美精品激情在线观看| 欧美中文在线观看| 欧美大片一区| 欧美一级淫片播放口| 久久久久久999| 中文网丁香综合网| 久久国产精品久久久久久| 亚洲精品一二| 欧美有码视频| 一区二区三区|亚洲午夜| 亚洲欧美在线免费| 妖精视频成人观看www| 香蕉久久国产| 99视频精品全国免费| 午夜在线a亚洲v天堂网2018| 亚洲人成网站在线观看播放| 亚洲欧美日本日韩| 在线视频亚洲欧美| 快she精品国产999| 久久福利电影| 欧美午夜寂寞影院| 亚洲福利视频在线| 黄色日韩精品| 亚洲欧美日本视频在线观看| a91a精品视频在线观看| 久久一区欧美| 久久免费精品视频| 国产精品一二三视频| 亚洲精品网址在线观看| 亚洲国产精品99久久久久久久久| 亚洲一级黄色| 国产精品99久久久久久久女警| 久久在线免费观看视频| 久久久久青草大香线综合精品| 欧美性猛交xxxx乱大交蜜桃| 亚洲精品国产精品久久清纯直播| 黄色精品一二区| 欧美一区三区三区高中清蜜桃| 亚洲视频一区二区在线观看 | 亚洲精品日韩在线观看| 在线观看亚洲一区| 午夜在线观看欧美| 欧美在线999| 国产日产欧产精品推荐色| 中文精品99久久国产香蕉| 亚洲特色特黄| 欧美日精品一区视频| 日韩视频不卡中文| 亚洲在线播放| 国产精品久久久久久久久| 亚洲一卡二卡三卡四卡五卡| 亚洲欧美日韩国产中文| 欧美亚州韩日在线看免费版国语版| 亚洲精选在线观看| 亚洲夜间福利| 国产欧美日韩不卡| 久久久www成人免费无遮挡大片| 久久久久中文| 亚洲欧洲一区二区三区在线观看 | 久久久久久综合网天天| 老司机午夜精品| 亚洲国产日韩欧美综合久久| 美乳少妇欧美精品| 亚洲人体影院| 午夜精品久久久久久久99黑人| 国产精品午夜春色av| 欧美综合第一页| 欧美激情视频在线播放| 一区二区欧美在线| 国产精品另类一区| 久久久久九九视频| 日韩亚洲不卡在线| 欧美伊人久久| 亚洲全部视频| 国产精品乱子久久久久| 久久精品中文字幕免费mv| 亚洲第一页在线| 亚洲欧美日韩国产一区二区| 国产一区视频网站| 欧美美女喷水视频| 欧美亚洲系列| 亚洲国语精品自产拍在线观看| 亚洲自拍电影| 在线欧美影院| 国产精品日本一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 99ri日韩精品视频| 免费成人网www| 亚洲性夜色噜噜噜7777| 在线成人免费视频| 国产精品日韩| 欧美精品播放| 久久精品最新地址| 在线视频欧美日韩精品| 欧美激情女人20p| 性18欧美另类| 亚洲精品人人| 在线观看91精品国产麻豆| 国产精品爱啪在线线免费观看| 久久久久久电影| 午夜一区不卡| 亚洲一级在线观看| 亚洲韩国一区二区三区| 久久一区中文字幕| 亚洲欧美日韩一区二区在线| 亚洲欧洲精品一区二区三区不卡| 国产视频欧美| 国产精品久久久一区二区| 欧美1区视频| 久久蜜桃av一区精品变态类天堂| 亚洲欧美日韩中文播放| 一本色道久久精品| 亚洲精品国产拍免费91在线| 久久一综合视频| 久久国产88| 欧美一区二区视频97| 香蕉久久夜色精品| 亚洲影院高清在线| 亚洲一区二区动漫| 亚洲一品av免费观看| 99在线精品免费视频九九视| 91久久亚洲| 亚洲三级性片| 999亚洲国产精| 99国产精品一区| 99re热精品| 亚洲一区二区三区四区中文| 在线综合亚洲欧美在线视频| 日韩亚洲视频在线| 99综合视频| 亚洲伊人色欲综合网| 亚洲男人第一av网站| 亚洲一区二区在线观看视频| 中文在线一区| 亚洲男人av电影| 久久精品亚洲一区二区三区浴池 | 激情成人综合| 亚洲国产毛片完整版 | 国产精品超碰97尤物18| 欧美色欧美亚洲高清在线视频| 欧美麻豆久久久久久中文| 欧美日韩亚洲一区三区| 国产精品久久久久一区二区| 国产精品一区二区女厕厕| 国产啪精品视频| 亚洲国产精品成人| 亚洲视频高清| 久久精品亚洲国产奇米99| 久久综合九色综合网站| 欧美激情精品久久久久久变态| 亚洲精品久久在线| 亚洲一级片在线看| 久久亚洲影院| 国产精品h在线观看| 国产一区二区看久久| 最新亚洲激情| 亚洲在线观看视频网站| 欧美伊人久久大香线蕉综合69| 久久中文欧美| 日韩视频亚洲视频| 久久国产精品一区二区| 欧美国产免费| 国产在线视频欧美| 一区二区三区欧美在线| 久久久综合视频| 99国产精品一区| 久久亚洲电影| 国产精品美女视频网站| 伊伊综合在线| 性欧美xxxx大乳国产app| 欧美国产日韩一区| 午夜精品视频在线观看一区二区| 毛片av中文字幕一区二区| 国产精品黄视频| 最新国产成人av网站网址麻豆| 午夜精品理论片| 亚洲美女免费精品视频在线观看| 久久精品国产久精国产一老狼| 欧美日韩一区二区视频在线| 韩国精品久久久999|