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

打算把lua作為項(xiàng)目的腳本語(yǔ)言,下面是不不錯(cuò)的教程,收藏
雖然很早前研究過(guò)Lua,但還沒(méi)有在放到項(xiàng)目中進(jìn)行檢驗(yàn),要親自用過(guò)才知道好壞~

LuaPlus是Lua的C++增強(qiáng),也就是說(shuō),LuaPlus本身就是在Lua的源碼上進(jìn)行增強(qiáng)得來(lái)的。用它與C++進(jìn)行合作,是比較好的一個(gè)選擇。
LuaPlus目前版本為:LuaPlus for Lua 5.01 Distribution Build 1080 (February 28, 2004)。大家可以到http://luaplus.org/ 站點(diǎn)下載:
源碼   (http://wwhiz.com/LuaPlus/LuaPlus50_Build1081.zip)
目標(biāo)碼 (http://wwhiz.com/LuaPlus/LuaPlus50_Build1081_Win32Binaries.zip)

介紹LuaPlus: 好用的Lua For C++擴(kuò)展      沐楓網(wǎng)志

[由于lua內(nèi)核升級(jí)到5.1,因此,luaplus也同樣跟著升級(jí)。最新的luaplus可以通過(guò)svn獲取,地址 svn://svn.luaplus.org/LuaPlus/work51,
同時(shí),luaplus基于5.0的內(nèi)核仍然在維護(hù)更新,也可以通過(guò)svn獲取,地址 svn://svn.luaplus.org/root/LuaPlus/Dev ]

我將在下面說(shuō)明,如何使用LuaPlus,以及如何更方便的讓LuaPlus與C++的類(lèi)合作無(wú)間。

1. 調(diào)用Lua腳本

 

    // 創(chuàng)建Lua解釋器:
    LuaStateOwner state; 
    
    
// 執(zhí)行Lua腳本:
    state->DoString("print('Hello World\\n')");
    
// 載入Lua腳本文件并執(zhí)行:
    state->DoFile("C:\\test.lua");
    
// 載入編譯后的Lua腳本文件并執(zhí)行:
    state->DoFile("C:\\test.luac");

2. 與Lua腳本互相調(diào)用

    // 為L(zhǎng)ua腳本設(shè)置變量
    state->GetGlobals().SetNumber("myvalue"123456);
    
// 獲得Lua變量的值
    int myvalue = state->GetGlobal("myvalue").GetInteger();
    
    
// 調(diào)用Lua函數(shù)
    LuaFunction<int> luaPrint = state->GetGlobal("print");
    luaPrint(
"Hello World\n");
    
    
// 讓Lua調(diào)用C語(yǔ)言函數(shù)
    int add(int a, int b)return a+b;}
    state
->GetGlobals().RegisterDirect("add", add);
    state
->DoString("print(add(3,4))");
    
    
// 讓Lua調(diào)用C++類(lèi)成員函數(shù)
    class Test{publicint add(int a, int b){return a+b;}};
    Test test;
    state
->GetGlobals().RegisterDirect("add", test, &Test::add);
    state
->DoString("print(add(3,4))");

   
3. 在Lua腳本中使用C++類(lèi)
   
    這個(gè)稍微有點(diǎn)小麻煩。不過(guò),我包裝了一個(gè)LuaPlusHelper.h的文件,它可以很輕松的完成這個(gè)工作。它的實(shí)現(xiàn)也很簡(jiǎn)單,大家可以從源碼上來(lái)獲得如何用純LuaPlus實(shí)現(xiàn)同樣的功能。
    不過(guò),這里仍然有一個(gè)限制沒(méi)有解決:不能使用虛成員函數(shù)。不過(guò)考慮到我們僅是在Lua調(diào)用一下C++函數(shù),并不是要將C++完美的導(dǎo)入到Lua,這個(gè)限制完全可以接受。
    另外,類(lèi)成員變量不能直接在Lua中訪問(wèn),可以通過(guò)類(lèi)成員函數(shù)來(lái)訪問(wèn)(比如SetValue/GetValue之類(lèi))。 

// 下面是一個(gè)簡(jiǎn)單的C++類(lèi):    
 class Logger
 
{
 
public:
  
void LOGMEMBER(const char* message)
  
{
   printf(
"In member function: %s\n", message);
  }

 
  Logger()
  
{
   printf(
"Constructing(%p)\n"this);
   v 
= 10;
  }

  
virtual ~Logger()
  
{
   printf(
"Destructing(%p)\n"this);
  }

 
  Logger(
int n)
  
{
   printf(
" -- Constructing[%d](%p)\n", n, this);
  }

  Logger(Logger
* logger)
  
{
   printf(
" -- Constructing[%p](%p)\n", logger, this);
   logger
->LOGMEMBER(" Call From Constructor\n");
  }

  
int SetValue(int val)
  
{
   v 
= val;
  }

  
int GetValue()
  
{
   
return v;
  }

 
public:
  
int v;
 }
;

 

    // 導(dǎo)入到Lua腳本:
    LuaClass<Logger>(state)
       .create(
"Logger"// 定義構(gòu)造函數(shù) Logger::Logger()
       .create<int>("Logger2")  // 定義構(gòu)造函數(shù) Logger::Logger(int)
       .create<Logger*>("Logger3"// 定義構(gòu)造函數(shù) Logger::Logger(Logger*)
      
 .destroy("Free")  // 定義析構(gòu)函數(shù) Logger::~Logger()
       .destroy("__gc")  // 定義析構(gòu)函數(shù) Logger::~Logger()
       .def("lm"&Logger::LOGMEMBER)  // 定義成員函數(shù) Logger::LOGMEMBER(const char*)
       .def("SetValue"&Logger::SetValue)
       .def(
"GetValue"&Logger::GetValue);

 

    // 在Lua中使用Logger類(lèi)(1):
    state->DoString(
        
"l = Logger();"  // 調(diào)用構(gòu)造函數(shù) Logger::Logger()
        "l:lm('Hello World 1');"  // 調(diào)用成員函數(shù) Logger::LOGMEMBER(const char*)
        "l:Free();"  // 調(diào)用析構(gòu)函數(shù) Logger::~Logger()
        );

 

    // 在Lua中使用Logger類(lèi)(2):
    state->DoString(
        
"m = Logger2(10);" // 調(diào)用構(gòu)造函數(shù) Logger::Logger(int)
        "m:lm('Hello World 2');"  // 調(diào)用成員函數(shù) Logger::LOGMEMBER(const char*)
        "n = Logger3(m);" // 調(diào)用構(gòu)造函數(shù) Logger::Logger(Logger*)
        "n:lm('Hello World 3');"  // 調(diào)用成員函數(shù) Logger::LOGMEMBER(const char*)
        "m:SetValue(11);"
        
"print(m.GetValue());"
        
"m,n = nil, nil;" // m,n 將由Lua的垃極回收來(lái)調(diào)用析構(gòu)函數(shù)
        );

4. 將一組C函數(shù)歸類(lèi)到Lua模塊

 

    //同上面一樣,我采用LuaPlusHelper.h來(lái)簡(jiǎn)化:
    LuaModule(state, "mymodule")
       .def(
"add", add)
       .def(
"add2", test, add);
 
    state
->DoString(
        
"print(mymodule.add(3,4));"
        
"print(mymodule.add2(3,4));"
        );

5. 使用Lua的Table數(shù)據(jù)類(lèi)型

    // 在Lua中創(chuàng)建Table
    LuaObject table = state->GetGlobals().CreateTable("mytable");
    table.SetInteger(
"m"10);
    table.SetNumber(
"f"1.99);
    table.SetString(
"s""Hello World");
    table.SetWString(
"ch", L"你好");
    table.SetString(
1"What");
    
    
// 相當(dāng)于Lua中的:
    
// mytable = {m=10, f=1.99, s="Hello World", ch=L"你好", "What"}

  

    // 也可以使用table作為key和value:
    state->GetGlobals().CreateTable("nexttable")
        .SetString(table, 
"Hello")
        .SetObject(
"obj", table);
    
// 相當(dāng)于Lua中的:
    
// nexttable = {mytable="Hello", obj=mytable}

 

    //獲得Table的內(nèi)容:
    LuaObject t2 = state->GetGlobals("mytable");
    
int m = t2.GetByName("m").GetInteger();
    
    LuaObject t3 
= state->GetGlobals("nexttable");
    std::
string str = t3.GetByObject(t2).GetString();

   
6  遍歷Table

 

 LuaStateOwner state;
 state.DoString( 
"MyTable = { Hi = 5, Hello = 10, Yo = 6 }" );
 
 LuaObject obj 
= state.GetGlobals()[ "MyTable" ];
 
for ( LuaTableIterator it( obj ); it; it.Next() )
 
{
     
const char* key = it.GetKey().GetString();
     
int num = it.GetValue().GetInteger();
 }


篇尾

上面我只是簡(jiǎn)單的舉一些例子來(lái)說(shuō)明LuaPlus以及LuaPlusHelper的使用方法,具體文檔請(qǐng)參見(jiàn)LuaPlus。

需要下載LuaPlusHelper,請(qǐng)點(diǎn)這里:
http://files.cnblogs.com/ly4cn/LuaPlusHelper.rar

測(cè)試程序(VC7.1):
http://files.cnblogs.com/ly4cn/LuaPlusTest.rar

posted on 2010-11-15 17:11 大寶天天見(jiàn) 閱讀(1142) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 6.Lua/XML
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲一区二区三区三| 欧美日韩精品在线| 午夜视频在线观看一区二区三区| 欧美体内she精视频| 欧美一激情一区二区三区| 一区二区三区色| 韩国精品久久久999| 欧美少妇一区| 欧美日韩午夜激情| 久久久久久久国产| 亚洲精品视频在线观看免费| 久久久久久噜噜噜久久久精品| 国产精品久久久久久久9999| 久久频这里精品99香蕉| 亚洲欧美一区二区原创| 中国女人久久久| 一区二区三区欧美在线观看| 欧美激情精品久久久久久久变态 | 农村妇女精品| 欧美在线视频播放| 午夜精品久久久久久久白皮肤 | 久久综合久久综合久久| 影音先锋中文字幕一区| 国产亚洲福利一区| 国产欧美精品| 国产日产亚洲精品| 国产偷国产偷亚洲高清97cao| 国产精品入口| 国产日韩欧美精品| 国产在线欧美| 激情综合视频| 91久久久在线| 一本色道久久加勒比精品| 亚洲人成在线观看一区二区| 亚洲精品一区二区三区四区高清| 91久久中文| 一本一道久久综合狠狠老精东影业| 国产精品久久午夜夜伦鲁鲁| 国产精品久久久久久久7电影| 国产精品视频精品| 极品日韩久久| 亚洲人成欧美中文字幕| 99精品黄色片免费大全| 亚洲男人的天堂在线观看| 久久成年人视频| 性亚洲最疯狂xxxx高清| 久久国产精品黑丝| 欧美freesex8一10精品| 91久久精品美女| 一二三区精品福利视频| 西西裸体人体做爰大胆久久久| 久久久91精品国产| 欧美精品偷拍| 国产欧美视频在线观看| 国产精品视频午夜| 精品福利电影| 一本色道久久88亚洲综合88| 欧美一二三区在线观看| 欧美激情影院| 性色av一区二区三区在线观看| 久久国产精品久久久久久久久久| 农村妇女精品| 国产午夜精品视频免费不卡69堂| 亚洲国产成人午夜在线一区| 亚洲视频免费看| 男女激情久久| 性欧美大战久久久久久久久| 欧美日韩dvd在线观看| 国产精品蜜臀在线观看| 亚洲精品1区2区| 久久久久国色av免费观看性色| 亚洲韩国精品一区| 久久精品亚洲一区| 国产精品毛片| 一本久道久久久| 久久精品国产一区二区三区| 国产欧美日韩亚洲精品| 狠狠色狠狠色综合| 久久视频精品在线| 欧美国产先锋| 影音先锋日韩精品| 欧美在线一级va免费观看| 99re66热这里只有精品3直播| 米奇777超碰欧美日韩亚洲| 国产亚洲一区二区三区在线观看| 亚洲午夜精品网| 亚洲一区二区三区高清不卡| 免费不卡中文字幕视频| 久久大逼视频| 国产一区观看| 久久精品99无色码中文字幕| 99精品国产一区二区青青牛奶| 免费国产一区二区| 亚洲第一免费播放区| 久久人人爽国产| 午夜精品久久久久久99热| 欧美性视频网站| 亚洲精品久久久久久久久久久| 免费成人黄色av| 久久综合九色欧美综合狠狠| 国产区日韩欧美| 欧美在线免费看| 欧美一区二区精美| 国产一区二区在线观看免费播放| 国产午夜精品久久久久久免费视 | 亚洲福利在线视频| 欧美成人免费小视频| 久久视频精品在线| 欧美日韩精品一区二区三区四区| 夜夜嗨av一区二区三区四区| 日韩视频中文| 国产精品久久久久久久久久免费看| 亚洲一区二区三区四区中文| 亚洲免费中文字幕| 欧美3dxxxxhd| 一区二区三区日韩精品视频| 亚洲视频在线视频| 狠狠久久亚洲欧美专区| 蜜臀a∨国产成人精品| 裸体女人亚洲精品一区| 国产久一道中文一区| 久久天天躁夜夜躁狠狠躁2022| 欧美另类69精品久久久久9999| 亚洲国产精品一区二区久| 久久成人精品无人区| 久久国产加勒比精品无码| 欧美日韩另类字幕中文| 亚洲欧洲日韩在线| 一区二区视频免费完整版观看| 亚洲一区二区三区成人在线视频精品| 日韩视频免费| 欧美激情小视频| 最新国产乱人伦偷精品免费网站 | 国产日韩欧美一区二区三区四区| 夜夜嗨av一区二区三区中文字幕| 亚洲黄页一区| 久久蜜桃香蕉精品一区二区三区| 久久九九精品| 极品裸体白嫩激情啪啪国产精品| 欧美影院午夜播放| 久久久精品久久久久| 国产欧美欧洲在线观看| 午夜欧美视频| 久久天堂国产精品| 亚洲区国产区| 欧美日韩国产综合视频在线观看 | 欧美激情一二区| 亚洲精品中文字幕有码专区| 亚洲特级毛片| 国产精品免费视频观看| 先锋影音国产精品| 免费不卡在线观看| 亚洲激精日韩激精欧美精品| 免费成人黄色片| 99天天综合性| 久久久久久亚洲精品中文字幕 | 久久综合给合久久狠狠色| 黄色欧美成人| 欧美激情视频给我| 亚洲午夜精品网| 欧美资源在线| 亚洲高清视频中文字幕| 欧美日韩国产色视频| 亚洲天堂av在线免费| 久久国产99| 99精品视频免费全部在线| 国产精品一区二区欧美| 久久只精品国产| 99xxxx成人网| 免费成人黄色片| 亚洲欧美久久久| 激情成人综合| 欧美视频在线免费看| 久久久精品日韩欧美| 一区二区三区视频在线播放| 久久视频国产精品免费视频在线 | 久久这里只有| 亚洲性线免费观看视频成熟| 国内精品视频在线观看| 欧美日韩国产首页在线观看| 午夜亚洲性色视频| 日韩一级黄色av| 欧美wwwwww| 久久精品女人天堂| 亚洲一区欧美激情| 最新高清无码专区| 国外成人在线视频| 国产精品免费电影| 欧美精品免费观看二区| 久久av红桃一区二区小说| 一区二区日韩精品| 欧美**字幕| 久久免费观看视频| 欧美综合二区| 午夜亚洲福利在线老司机| 亚洲精品国产精品国自产在线| 国产午夜精品久久久| 国产精品毛片a∨一区二区三区| 久久综合伊人77777| 欧美视频一区二区三区在线观看|