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

Heath's Blog

There is no end, it is just the beginning! - A Game Developer's Notes

Some tips of using toLua

在使用toLua重構腳本系統時,遇到了一些問題,在此將其解決方案做一下備忘。

一、How to complie
    在linux下只需簡單地執行make即可。而在windows平臺下,情況會稍微復雜點。由于toLua的產出分為exe和lib,其中exe用于自動產生bind代碼,lib作為腳本系統的連接庫使用。為了產生exe文件,需要創建一個win32 console工程,將src\lib和src\bin的.h、.c添加到這個工程中來,然后編譯(當然別忘了設置鏈接lua庫);而產生lib,則需要創建static lib工程,然后將src\lib下的source添加進來編譯(同樣別忘了設置鏈接lua庫)。
二、How to use(How to transplant)
    在src\tests下有示例代碼,其中.pkg文件內容與header file幾乎一致,只是多了toLua處理指令(以$開頭),其詳細說明可參考“tolua++ - Reference Manual”。為了避免將眾多的header files內容復制到.pkg,我們使用了$cfile指令,這樣只需在每個需要導出到lua中的頭文件所對應的.pkg文件中添加一條$cfile指令即可,但世上沒有免費的午餐,這樣做有個前提:需要在頭文件中添加導出指示符(以注釋方式給出)。需要注意的是:1).pkg文件必須以一個新行結束文件;2)使用導出指示符時,//tolua_export需位于類名繼承關系之后。對于導出單個或少數方法,需要在方法聲明前加//tolua_begin,結束加//tolua_end。對于如果//tolua_end不在類定義最后(即};之后)的情況,需在類定義最后加//tolua_export;3)如需在腳本中生成對象,則需導出構造和析構函數。下面舉具體例子加以說明:

//////////Test.h/////////////
#pragma once

class Hello 
{
public:
    Hello();
    
virtual ~Hello();
    
virtual void Say();
}
;

class HelloWorld : public Hello {//tolua_export
public:
    
//tolua_begin
    HelloWorld() {}
    
~HelloWorld() {}
    
//tolua_end
    void Say();
    
//tolua_begin
    void GG();
    
//tolua_end
}
;//tolua_export

/////////////Test.cpp////////////////

#include 
"Test.h"
#include 
<iostream>

using namespace std;

Hello::Hello()
{

}


Hello::
~Hello()
{

}


void Hello::Say()
{
    cout 
<< "Hello" << endl;
}


void HelloWorld::Say()
{
    cout 
<< "Hello, World!" << endl;
}


void HelloWorld::GG()
{
    cout 
<< "Go go!" << endl;
}

////////main.cpp////////

include 
"toLua.h"
#include 
"_Test.h"  /// generate by toLua

void main()
{
    
int tolua_Test_open(lua_State*);

    lua_State
* L = lua_open();
    luaL_openlibs(L);
    tolua_Test_open(L);

    luaL_dofile(L , 
"Test.Lua");

    lua_close(L);
}

//////////Test.lua/////////
print "Start"
local hw 
= HelloWorld:new()
hw:GG()
print "End"

//////Test.pkg//////
$cfile 
"Test.h"
<new line>


_Test.h和_Test.cpp是用ToLua -o _Test.cpp -H _Test.h Test.pkg命令產生的。


補充:針對在腳本中使用已經創建好的C++對象,需要使用tolua_pushusertype和lua_setglobal。在上面例子中,如果只想在腳本中調用指定對象的GG方法,則只需用tolua_begin和tolua_end來包括GG(),然后修改main.cpp和腳本:

///////main.cpp//////

#include 
"toLua.h"
#include 
"_Test.h"

void main()
{
    
int tolua_Test_open(lua_State*);

    lua_State
* L = lua_open();
    luaL_openlibs(L);
    tolua_Test_open(L);
    HelloWorld
* pHelloWorld = new HelloWorld;
    tolua_pushusertype(L,(
void*)pHelloWorld,"HelloWorld");
    lua_setglobal(L , 
"HelloWorld");
    luaL_dofile(L , 
"Test.Lua");

    lua_close(L);
}

 

////////Test.lua////////

print 
"Start"
HelloWorld:GG()
print 
"End"


三、How to automatize

    Visual studio為每個工程提供了配置“Pre-Build Event”、“Pre-Link Event”以及“Post-Build Event”的機會,她位于工程屬性的“Build Events”條目中。為了在每次編譯前,自動產生lua綁定的相關代碼,可在“Command Line”中寫下我們在命令行中輸入的toLua命令。

posted on 2009-01-18 13:56 Heath 閱讀(2098) 評論(2)  編輯 收藏 引用 所屬分類: Script Programming

Feedback

# re: Some tips of using toLua[未登錄] 2009-01-21 19:25 ME

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

  • <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>
              欧美激情偷拍| 欧美一区二区播放| 一区二区三区蜜桃网| 欧美国产一区二区在线观看| 国内精品福利| 久久精品导航| 先锋影音一区二区三区| 国产精品久久久久久影视| 亚洲视频免费观看| 久久精品一区二区| 欧美影院精品一区| 亚洲第一色在线| 久久久在线视频| 亚洲激情欧美激情| 欧美大片在线影院| 蜜臀久久久99精品久久久久久| 在线观看成人小视频| 开心色5月久久精品| 久久久久久久成人| 亚洲图片欧美午夜| 久久久噜噜噜久久久| 在线视频亚洲欧美| 久久精品成人欧美大片古装| 99国产精品久久久久老师| 国产精品99久久久久久有的能看| 狠狠爱成人网| 9i看片成人免费高清| 国内精品嫩模av私拍在线观看| 最新成人在线| 好看的日韩视频| 一区二区三区四区蜜桃| 亚洲高清一区二| 亚洲尤物在线| 一区二区电影免费观看| 久久尤物视频| 久久精品国产免费看久久精品| 欧美成人伊人久久综合网| 久久精品国产欧美激情| 欧美视频在线播放| 欧美激情亚洲一区| 精品二区视频| 久久不射网站| 欧美一区二区在线播放| 欧美日韩人人澡狠狠躁视频| 欧美激情一区二区三区在线视频| 国产欧美日韩另类一区 | 国产精品尤物| 一级成人国产| 艳妇臀荡乳欲伦亚洲一区| 美女主播视频一区| 久久夜精品va视频免费观看| 国产精品视频网站| 一区二区三区精密机械公司| 一区二区三区免费观看| 欧美成人午夜激情| 亚洲电影观看| 亚洲精品永久免费精品| 欧美a一区二区| 欧美国产精品| 亚洲日韩欧美一区二区在线| 免费一区视频| 一二三区精品| 久久精品观看| 老司机久久99久久精品播放免费| 国产一区二区在线观看免费播放| 亚洲欧美电影在线观看| 欧美中文字幕第一页| 国产精品女主播| 亚洲永久免费观看| 久久精品在线播放| 激情文学一区| 美女精品国产| 亚洲精品免费在线播放| 一区二区三区**美女毛片| 欧美日韩18| 亚洲自啪免费| 亚洲国产精品一区二区三区| 米奇777在线欧美播放| 亚洲国产专区| 亚洲综合色婷婷| 国产伦精品一区二区三区视频黑人| 亚洲综合导航| 欧美v国产在线一区二区三区| 亚洲激情在线| 国产精品久久久久aaaa| 欧美资源在线观看| 亚洲国产日韩美| 亚洲欧美日韩综合一区| 国产一区二区三区黄视频| 欧美不卡在线| 亚洲一区二区精品在线| 久久综合久久综合这里只有精品| 亚洲精品乱码| 国产精品视频午夜| 久久综合国产精品| 中文精品在线| 欧美国产三区| 小处雏高清一区二区三区| 一区二区三区在线观看国产| 欧美日韩国产一区二区三区地区| 午夜精品久久久久| 最新亚洲激情| 久久久噜噜噜久久中文字幕色伊伊| 亚洲激情啪啪| 国产日产亚洲精品| 欧美日韩国产丝袜另类| 小黄鸭视频精品导航| 亚洲精品乱码久久久久久| 久久精品91久久久久久再现| 亚洲精品乱码久久久久久久久| 国产精品尤物| 欧美三区美女| 免播放器亚洲一区| 午夜亚洲视频| 在线视频中文亚洲| 亚洲欧洲日本在线| 欧美a级理论片| 久久精品免费观看| 亚洲女人天堂av| 日韩一级大片| 亚洲精品乱码久久久久久| 一区二区在线看| 国产模特精品视频久久久久 | 亚洲一区日韩| 日韩视频―中文字幕| 嫩草影视亚洲| 久久午夜影视| 久久激情视频久久| 午夜在线精品偷拍| 亚洲婷婷综合久久一本伊一区| 亚洲精品九九| 亚洲人成绝费网站色www| 伊人成人网在线看| 韩国女主播一区| 国产一区二区三区在线观看精品 | 欧美一区二区视频97| 亚洲欧美日韩一区在线| 亚洲一区二区视频在线| 亚洲一区国产一区| 亚洲一区精彩视频| 宅男噜噜噜66一区二区| 一区二区三区国产精华| 一区二区精品国产| 亚洲先锋成人| 午夜精品久久久| 欧美亚洲免费电影| 国产欧美一区二区三区另类精品| 国产精品乱码久久久久久| 国产精品久久久久久影视| 国产精品久久久久aaaa九色| 国产精品久久久久久久9999| 国产精品美女| 国产亚洲毛片| 在线视频观看日韩| 日韩一级不卡| 欧美一级视频精品观看| 久久久久久久久一区二区| 久久看片网站| 亚洲国产美女久久久久| 宅男精品视频| 欧美专区日韩专区| 美日韩免费视频| 欧美午夜不卡影院在线观看完整版免费| 国产精品va在线播放| 国产视频精品xxxx| 亚洲第一在线综合网站| 亚洲视频一二区| 久久久久久久综合色一本| 欧美成人精品h版在线观看| 亚洲精品一区二区三区福利| 亚洲一级特黄| 蜜月aⅴ免费一区二区三区| 欧美日韩精品高清| 国内精品免费在线观看| 亚洲精品一区二区三区婷婷月 | 亚洲天堂av综合网| 久久精品亚洲| 91久久久久久| 欧美综合激情网| 欧美日韩精品久久久| 国产一区二区精品在线观看| 日韩午夜在线观看视频| 久久国产精品一区二区三区四区 | 牛夜精品久久久久久久99黑人| 日韩亚洲欧美一区二区三区| 久久国产精品久久久久久久久久| 欧美劲爆第一页| 韩日欧美一区二区三区| 亚洲欧美日韩国产成人| 欧美激情第4页| 欧美伊人久久久久久久久影院| 欧美乱人伦中文字幕在线| 在线成人激情黄色| 欧美一区二区三区视频免费| 亚洲欧洲精品一区二区三区| 久久久免费精品视频| 国产一区二区黄| 欧美一区二区视频在线| 一区二区三区**美女毛片| 欧美精品成人一区二区在线观看|