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

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>
              av不卡在线观看| 久久福利精品| 欧美va天堂va视频va在线| 欧美一级电影久久| 欧美伊人久久久久久午夜久久久久| 亚洲欧美日韩视频一区| 欧美一区二区精品久久911| 欧美一区亚洲| 久久影院午夜片一区| 欧美激情一二三区| 亚洲三级性片| 亚洲国产一成人久久精品| 亚洲黑丝一区二区| 99视频精品全部免费在线| 亚洲一二三区视频在线观看| 校园春色国产精品| 免费观看在线综合色| 国产精品黄色| 麻豆精品网站| 亚洲欧美一区二区激情| 久久激情视频久久| 欧美片第一页| 狠狠色丁香久久综合频道| 亚洲精品国产品国语在线app| 亚洲与欧洲av电影| 欧美va日韩va| 一区二区欧美日韩视频| 国产日韩精品一区二区三区在线 | 欧美久久影院| 国产精品一区二区久久精品| 在线精品一区| 亚洲欧美日韩在线一区| 欧美激情一区二区三区四区 | 亚洲欧美日本国产专区一区| 国产午夜久久久久| 9久re热视频在线精品| 久久精品国产第一区二区三区| 欧美激情欧美激情在线五月| 午夜精品一区二区三区在线视| 欧美高清在线一区| 国产主播精品| 欧美一区二区三区视频| 欧美日韩午夜剧场| 亚洲伊人伊色伊影伊综合网| 欧美成va人片在线观看| 韩日成人在线| 久久精品亚洲乱码伦伦中文| 欧美一区影院| 中日韩男男gay无套 | 国产精品青草久久久久福利99| 亚洲国产成人午夜在线一区| 久久精视频免费在线久久完整在线看| 韩日精品在线| 激情久久久久久久久久久久久久久久| 午夜亚洲视频| 亚洲在线视频观看| 国产精品一区二区在线观看| 亚洲欧美国内爽妇网| 一本色道久久综合狠狠躁篇怎么玩| 欧美成人性网| 一区二区三区国产精华| 亚洲精品在线一区二区| 欧美精品大片| 亚洲一品av免费观看| 在线性视频日韩欧美| 国产精品日韩在线观看| 久久99在线观看| 欧美xxx成人| 欧美不卡在线视频| 亚洲精品国产系列| 久久五月天婷婷| 久久久www| 亚洲精品影视| 日韩亚洲精品在线| 99re66热这里只有精品3直播| 91久久香蕉国产日韩欧美9色| 欧美乱妇高清无乱码| 亚洲欧美精品在线观看| 欧美在线播放视频| 欧美精品亚洲精品| 欧美日韩中国免费专区在线看| 亚洲午夜精品久久| 亚洲免费在线观看| 在线电影国产精品| 亚洲麻豆国产自偷在线| 国产精品夜夜夜一区二区三区尤| 久久aⅴ国产紧身牛仔裤| 久久尤物电影视频在线观看| 夜夜嗨av一区二区三区中文字幕 | 久久精品国产欧美激情| 亚洲日产国产精品| 99精品国产在热久久| 国产欧美精品一区二区色综合 | 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲福利视频一区| 一区二区三区国产精品| 精品成人在线| 一区二区三区高清不卡| 影视先锋久久| 亚洲一区二区动漫| 亚洲精品美女在线观看| 午夜伦理片一区| 日韩亚洲在线| 久久理论片午夜琪琪电影网| 欧美日韩成人精品| 老鸭窝91久久精品色噜噜导演| 欧美日韩一区二区高清| 快播亚洲色图| 国产精品视频免费在线观看| 亚洲高清不卡一区| 亚洲福利视频在线| 久久精品91| 亚洲欧美另类中文字幕| 欧美高清在线一区二区| 久久色中文字幕| 国产精品视频你懂的| 日韩视频精品在线| 亚洲电影观看| 午夜在线a亚洲v天堂网2018| 一区二区三区色| 猫咪成人在线观看| 免费在线欧美视频| 国内视频一区| 国产日产欧产精品推荐色 | 亚洲香蕉视频| 欧美jjzz| 亚洲国产91| 亚洲丶国产丶欧美一区二区三区| 亚洲欧美日韩专区| 国产精品日韩一区二区| 久久精品欧美| 国产九区一区在线| 国产精品99久久久久久久久| 日韩午夜一区| 免费人成网站在线观看欧美高清| 久久久在线视频| 亚洲国产精品电影在线观看| 激情另类综合| 久久久国产一区二区| 久久久国产精品亚洲一区| 久久精品最新地址| 久久综合久久综合九色| 国产综合一区二区| 午夜精品久久久久久久久| 午夜欧美大尺度福利影院在线看| 亚洲欧美日韩精品久久久久| 欧美日韩亚洲一区在线观看| 亚洲精品精选| 亚洲一区二区三区在线播放| 久久精品一区二区三区中文字幕 | 亚洲欧洲一区二区在线播放| 久久人人爽爽爽人久久久| 亚洲国产成人av| 欧美精品一区二区三区一线天视频 | 亚洲免费高清视频| 亚洲午夜电影网| 国产精品青草久久久久福利99| 亚洲一区日韩| 久久精品女人| 亚洲美女91| 中文欧美字幕免费| 欧美一区二粉嫩精品国产一线天| 国产在线观看精品一区二区三区| 久久久噜噜噜久久狠狠50岁| 亚洲精品国精品久久99热| 亚洲一区二区在| 国产婷婷精品| 久久国产精品久久久久久久久久| 亚洲欧美精品在线| 另类亚洲自拍| 亚洲一区二区3| 国产真实乱子伦精品视频| 免费黄网站欧美| 中文一区二区| 欧美顶级大胆免费视频| 精品999在线观看| 欧美精品日韩精品| 午夜精品美女久久久久av福利| 久久久亚洲影院你懂的| 一本到高清视频免费精品| 国产欧美精品一区aⅴ影院| 欧美激情一区二区在线| 亚洲欧美中日韩| 亚洲国产美女| 久久久噜噜噜久久| 一区二区欧美在线| 久久精品伊人| 中文欧美日韩| 亚洲欧美激情一区二区| 欧美激情按摩| 欧美在线不卡| 日韩视频中文| 黄色欧美成人| 欧美激情2020午夜免费观看| 国产欧美精品xxxx另类| 免费人成精品欧美精品| 性色一区二区| 亚洲视频免费在线观看| 最新日韩在线| 亚洲国产欧美在线人成|