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

的筆記

隨時隨地編輯

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>
            亚洲第一中文字幕在线观看| 国产精品永久入口久久久| 伊人一区二区三区久久精品| 久久精品国语| 久久激情中文| 亚洲第一黄网| 亚洲黄网站在线观看| 欧美成人资源网| 一本大道久久精品懂色aⅴ| 91久久在线播放| 国产精品国产三级国产aⅴ无密码| 午夜精品一区二区三区在线| 国产欧亚日韩视频| 欧美成人四级电影| 欧美日韩视频专区在线播放| 亚洲欧美不卡| 久久久天天操| 9i看片成人免费高清| 亚洲视频 欧洲视频| 国产视频一区二区在线观看| 欧美成人精品一区二区| 欧美ab在线视频| 亚洲一区在线播放| 久久频这里精品99香蕉| 在线亚洲成人| 久久精品国产精品| 亚洲免费高清视频| 亚洲欧美日韩国产中文| 亚洲激情影视| 亚洲一区精彩视频| 亚洲激情午夜| 性8sex亚洲区入口| 99re6这里只有精品| 性色av一区二区三区在线观看| 鲁大师成人一区二区三区| 亚洲精品欧美在线| 亚洲视频综合在线| 91久久国产综合久久蜜月精品| 久久精品91| 欧美α欧美αv大片| 欧美一区二区三区久久精品| 欧美成人三级在线| 久久婷婷综合激情| 欧美日韩在线视频观看| 欧美激情亚洲| 国模精品娜娜一二三区| 亚洲午夜一区二区三区| 91久久黄色| 久久久久欧美精品| 欧美影院精品一区| 欧美午夜精品久久久久久超碰| 日韩午夜免费| 久久综合久久综合久久| 久久av老司机精品网站导航 | 国产精品v日韩精品| 蜜桃av噜噜一区| 国产精品福利片| 9国产精品视频| 亚洲久久成人| 欧美电影在线| 欧美成年网站| 亚洲国产成人久久综合| 欧美在线亚洲一区| 久久精品女人天堂| 国内精品久久国产| 欧美一级视频免费在线观看| 亚洲欧美久久久| 国产精品久久久久高潮| 中文av一区特黄| 午夜日韩电影| 国产日产精品一区二区三区四区的观看方式 | 一级成人国产| 欧美国产综合视频| 亚洲精选国产| 一区二区三区国产| 欧美视频在线观看视频极品| 亚洲欧洲视频| 日韩视频在线观看一区二区| 欧美激情第二页| 亚洲免费av网站| 亚洲欧美日本精品| 国产精品视频yy9099| 午夜精彩视频在线观看不卡| 欧美一区影院| 狠狠久久亚洲欧美专区| 蜜月aⅴ免费一区二区三区| 欧美激情第9页| 亚洲最新中文字幕| 国产精品丝袜xxxxxxx| 亚洲欧美中文字幕| 欧美xxxx在线观看| 日韩午夜一区| 国产精自产拍久久久久久蜜| 久久激情综合网| 亚洲高清在线精品| 亚洲欧美成aⅴ人在线观看| 国产在线一区二区三区四区 | 久久亚洲私人国产精品va| 精品1区2区3区4区| 久色成人在线| 中文在线资源观看网站视频免费不卡 | 亚洲视频在线免费观看| 国产精品自拍在线| 欧美主播一区二区三区美女 久久精品人| 亚洲欧洲日韩女同| 欧美三日本三级少妇三2023| 香蕉久久夜色精品国产| 农村妇女精品| 亚洲男人的天堂在线| 好吊视频一区二区三区四区| 欧美激情精品久久久久久黑人| 久久岛国电影| 亚洲国产精品第一区二区三区| 亚洲欧美中文日韩在线| 美女性感视频久久久| 在线视频日本亚洲性| 国产综合在线视频| 欧美视频一区二区| 老牛影视一区二区三区| 亚洲欧美日产图| 91久久久一线二线三线品牌| 久久久久免费视频| 亚洲一区在线看| 亚洲人久久久| 红桃视频亚洲| 国产日产亚洲精品系列| 欧美日韩国内| 欧美刺激性大交免费视频| 久久精品一区中文字幕| 亚洲小说区图片区| 亚洲精品一区二区三区婷婷月| 一区二区三区精密机械公司| 国内外成人在线视频| 国产目拍亚洲精品99久久精品 | 老司机精品视频网站| 亚洲一区二区精品在线| 91久久精品久久国产性色也91 | 亚洲美女精品久久| 欧美成年网站| 免费不卡在线视频| 久久精品视频亚洲| 久久av免费一区| 欧美在线观看一区| 亚洲免费在线| 亚洲欧美日韩区| 亚洲午夜精品福利| 亚洲视频精品| 正在播放日韩| 亚洲一区二区三区高清| 亚洲一区二区三区在线播放| 一区二区成人精品| 一本一本久久| 亚洲一区中文| 欧美在线一二三区| 久久精品中文字幕一区| 久久久精品tv| 久久亚洲一区二区| 奶水喷射视频一区| 亚洲国产精品日韩| 亚洲乱码国产乱码精品精可以看| 亚洲欧美日韩爽爽影院| 亚洲女爱视频在线| 性欧美大战久久久久久久久| 久久精品国产在热久久 | 欧美国产丝袜视频| 欧美日韩激情网| 国产精品美女久久福利网站| 国产精品夜夜嗨| 黄色影院成人| 亚洲精品国产精品国自产在线 | 国产欧美日韩三级| 国产视频一区三区| 在线观看成人网| 亚洲精品视频一区| 亚洲欧美综合国产精品一区| 久久视频这里只有精品| 欧美福利视频网站| 亚洲视频日本| 久久精品首页| 欧美激情麻豆| 国产欧美日韩视频一区二区| 亚洲风情亚aⅴ在线发布| 在线综合亚洲欧美在线视频| 欧美一区二区三区四区在线观看地址| 日韩午夜在线观看视频| 性伦欧美刺激片在线观看| 蜜桃精品久久久久久久免费影院| 亚洲欧美日韩成人高清在线一区| 亚洲精品美女| 校园春色国产精品| 亚洲国产精品va在线看黑人 | 亚洲人www| 亚洲在线日韩| 欧美激情一区在线| 亚洲男人第一网站| 欧美日韩三级一区二区| 亚洲第一主播视频| 亚洲男人的天堂在线观看 | 韩国精品一区二区三区| 99re热这里只有精品免费视频|