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

的筆記

隨時隨地編輯

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ⅴ视频| 日韩亚洲国产欧美| 一本久久综合亚洲鲁鲁| 欧美成人午夜77777| 欧美成人在线免费观看| 黄色欧美日韩| 久久久精品日韩欧美| 久久久久国产精品一区二区| 国产日韩一区在线| 午夜精品偷拍| 久久久亚洲高清| 狠狠88综合久久久久综合网| 欧美影院精品一区| 久久先锋影音| 亚洲国产一区二区三区高清| 鲁大师影院一区二区三区| 蜜臀久久久99精品久久久久久 | 久久精品成人欧美大片古装| 欧美中文字幕久久| 国产视频亚洲| 久久影院午夜论| 欧美激情视频一区二区三区不卡| 亚洲国产欧美日韩| 欧美精品激情| 一区二区三区四区五区精品| 午夜精品在线观看| 国产一区高清视频| 久久综合伊人77777蜜臀| 亚洲国产高清aⅴ视频| 99精品久久久| 国产女精品视频网站免费| 久久精品国产欧美激情| 欧美成人中文字幕| 一区二区三区免费看| 国产精品免费aⅴ片在线观看| 小黄鸭视频精品导航| 欧美1区2区3区| 一本色道久久综合狠狠躁篇的优点 | 99这里有精品| 久久精品中文字幕一区二区三区 | 国产精品视频第一区| 欧美在线影院在线视频| 亚洲国产欧美一区| 性做久久久久久免费观看欧美 | 国产日韩欧美成人| 免费在线观看一区二区| 中文在线资源观看网站视频免费不卡 | 欧美激情一区二区| 亚洲综合色丁香婷婷六月图片| 国产人妖伪娘一区91| 欧美aa在线视频| 午夜一级久久| 亚洲精品久久久久久久久久久| 欧美一级久久久| 亚洲伦理中文字幕| 国产一区二区三区丝袜| 欧美人与性禽动交情品| 久久狠狠婷婷| 亚洲视频在线二区| 亚洲国产精品电影| 久久婷婷国产麻豆91天堂| 亚洲天堂久久| 亚洲欧洲精品一区二区三区波多野1战4 | 中文欧美字幕免费| 亚洲电影下载| 国产日韩1区| 国产精品v片在线观看不卡| 噜噜噜91成人网| 欧美在线关看| 亚洲伊人伊色伊影伊综合网| 亚洲日本欧美在线| 男女激情久久| 久久一区二区三区av| 性欧美xxxx视频在线观看| av成人黄色| 亚洲美女av网站| 亚洲高清在线播放| 影音先锋另类| 国产一区二区三区精品欧美日韩一区二区三区 | 一区二区三区四区精品| 亚洲经典自拍| 亚洲经典三级| 亚洲国产免费看| 一区精品在线播放| 狠狠v欧美v日韩v亚洲ⅴ| 国产欧美日韩亚洲| 国产精品裸体一区二区三区| 欧美日韩一级大片网址| 欧美精品一区二| 欧美激情中文字幕一区二区| 欧美~级网站不卡| 麻豆国产精品777777在线| 久久久免费精品视频| 久久免费国产| 免费成人性网站| 欧美成人官网二区| 欧美韩日一区二区| 欧美人与性动交a欧美精品| 欧美伦理91| 欧美性猛交一区二区三区精品| 欧美三区在线视频| 国产精品久久久久久久久动漫| 欧美视频一二三区| 国产精品日韩专区| 国产一区二区久久久| 狠狠色狠狠色综合日日tαg| 在线电影院国产精品| 亚洲第一精品夜夜躁人人爽| 亚洲激情综合| 国产精品99久久久久久白浆小说 | 欧美丰满少妇xxxbbb| 亚洲国产成人久久综合一区| 最近看过的日韩成人| 亚洲免费观看高清完整版在线观看熊| 亚洲精品在线看| 一本到12不卡视频在线dvd| 亚洲综合欧美日韩| 久久久精品五月天| 欧美极品色图| 国产免费成人| 在线精品国产欧美| 日韩系列在线| 欧美一级在线亚洲天堂| 麻豆国产精品777777在线| 亚洲精品三级| 久久电影一区| 欧美日韩国产页| 国产日韩高清一区二区三区在线| 在线电影国产精品| 亚洲午夜日本在线观看| 久久激情婷婷| 亚洲精品视频免费| 欧美在线免费视屏| 欧美日韩xxxxx| 红桃视频一区| 亚洲在线播放| 欧美激情91| 午夜精品久久久久久久99热浪潮 | 欧美在线综合| 欧美日韩国产123区| 国内精品久久久久久影视8| 亚洲精品国产品国语在线app| 午夜精品久久久久久99热软件| 久久综合色影院| 亚洲一区二区三区在线看| 免费欧美高清视频| 国产一区二区三区日韩| 亚洲手机成人高清视频| 欧美不卡在线视频| 午夜激情综合网| 欧美性做爰毛片| 日韩一本二本av| 牛牛国产精品| 欧美有码在线视频| 国产精品人成在线观看免费| 亚洲精品视频免费| 久久综合伊人77777蜜臀| 亚洲专区免费| 欧美福利电影网| 欧美一区=区| 久久久成人精品| 国产精品美女主播| 亚洲无玛一区| 亚洲免费av网站| 欧美国产精品v| 亚洲欧洲日本国产| 欧美成人有码| 六月天综合网| 在线观看亚洲| 久久综合给合久久狠狠狠97色69| 亚洲一区图片| 国产精品日本精品| 午夜精品久久久久久久男人的天堂 | 亚洲国产乱码最新视频| 久久综合狠狠综合久久综合88| 亚洲男同1069视频| 国产精品一卡| 久久国产加勒比精品无码| 亚洲专区一区二区三区| 国产精品一区二区在线观看网站 | 久久美女艺术照精彩视频福利播放| 国产精品亚洲网站| 亚洲欧美日韩综合aⅴ视频| 亚洲视频一区在线观看| 国产欧美日韩不卡免费| 久久精品五月婷婷| 久久亚裔精品欧美|