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

戰(zhàn)魂小筑

討論群:309800774 知乎關注:http://zhihu.com/people/sunicdavy 開源項目:https://github.com/davyxu

   :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  257 隨筆 :: 0 文章 :: 506 評論 :: 0 Trackbacks

 

最近準備在手機項目客戶端中使用lua, 以前一直在服務器使用luabind. 另外, tolua++也體驗過, LuaPlus也在早年用過. 以下是本人對這些綁定庫的個人感覺:

luabind

利用boost機制把綁定做到極致, 比較適合主c++, 弱lua的腳本框架.

作者已經(jīng)停止更新, 在windows/linux編譯沒問題, 但是在ios的LLVM下, 無法編譯

tolua++

像cocos2dx使用tolua++也是可以理解的, 那么多函數(shù)需要綁定, tolua++的頭文件parse及自動代碼生成節(jié)約了很多手動綁定的時間.

但是看到代碼中有一部分bugfix就心存不安(純個人感覺, 本人使用不多, 歡迎磚頭伺候),另外, tolua++只能由腳本層驅動C++, 而沒有將已經(jīng)實例化的句柄注冊到lua的功能也是煞筆啊

 

LuaPlus

接口較為簡單, 適于初學者上手, 無任何的模板, 性能不高

 

luaBridge

項目地址: https://github.com/vinniefalco/LuaBridge

手冊: http://vinniefalco.com/LuaBridge/Manual.html

純頭文件實現(xiàn), 無需編譯, 包含進入工程即可, 接口簡潔高效

相比luabind, 唯一不能實現(xiàn)的常用功能就是枚舉, 但是可以支持類成員靜態(tài)變量注冊, 這個就無所謂了, 手寫一個枚舉支持也很簡單

看下演示代碼:

class A
{
public:
    A( )
    {

    }
    virtual void foo( int a )
    {
        printf("foo base\n");
    }

    std::string Member;
};

class B : public A
{
public:
    virtual void foo( int a )
    {
        printf("foo inherited\n");
    }
};
void foo( int b )
{

}

luabridge::getGlobalNamespace(L)
        .beginClass<A>("Sobj")
            .addConstructor<void (*) (void)> ()
            .addFunction("foo", &A::foo)
            .addData("Member",&A::Member)
        .endClass()
        .deriveClass<B, A>("SSec")
            .addFunction("foo",&B::foo )
        .endClass();

    luabridge::getGlobalNamespace(L).addFunction("foo", foo );


    B ins;
    ins.Member = "data";
    luabridge::setGlobal(L, ins, "ins");

lua側的代碼

local a = Sobj()
a:foo(2)
a.Member = "hello"


ins:foo(3)
posted on 2013-12-07 14:05 戰(zhàn)魂小筑 閱讀(12431) 評論(24)  編輯 收藏 引用 所屬分類: 腳本技術 、C++/ 編程語言

評論

# re: 超越luabind的luaBridge[未登錄] 2013-12-08 22:44 微妙的平衡
這個不錯  回復  更多評論
  

# re: 超越luabind的luaBridge 2013-12-09 00:26 楊粼波
我用過的棒子貨LuaTinker倒是不錯.
這個可以嘗試下...  回復  更多評論
  

# re: 超越luabind的luaBridge 2013-12-09 09:47 戰(zhàn)魂小筑
我也用過, 但是用過luabridge后, 那貨也就放箱底了@楊粼波
  回復  更多評論
  

# re: 超越luabind的luaBridge 2013-12-13 17:38 力為
還在用luabind。
貌似有人繼續(xù)維護吧?  回復  更多評論
  

# re: 超越luabind的luaBridge 2014-01-03 21:44 戰(zhàn)魂小筑
開源的,自己改也沒問題。況且這段時間用下來沒啥問題@力為
  回復  更多評論
  

# re: 超越luabind的luaBridge 2014-03-13 16:20 sthouwu
哈哈,之前端游項目就是用的LuaBridge。  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-10-28 09:26 phantom
luabridge綁定的成員函數(shù),如果參數(shù)個數(shù)大于1個,從腳本調用直接就crash,你沒有遇到這個問題?  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-10-28 09:29 phantom
我就是看你這個博客才用的luabridge,結果一試,這個問題太明顯,而且更妙的是,官方demo沒有一個超過2參的例子,不得不承認這庫真是太傻逼了。  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-10-28 09:31 戰(zhàn)魂小筑
@phantom
我用的非常正常, 沒發(fā)現(xiàn)有什么問題
1. 沒改源碼
2. 都參考官方例子使用
碰到問題, 貼出代碼來才是王道, 人家也是測了很久才發(fā)的
發(fā)現(xiàn)問題就罵庫, 繞半天才發(fā)現(xiàn)是自己的問題  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-10-28 13:19 phantom
@戰(zhàn)魂小筑
謝謝你回復這么快,我傳到百度盤了,代碼很少
http://pan.baidu.com/s/1c0c62ru
owcmn.h忘了打包給個github地址
https://github.com/bhlzlx/graphics/blob/master/ow/owcmn/owcmn.h
別外,我直接下載的luabridge最新版,有編譯錯誤,pushstring的地方要改成pushlstring才編譯過去。
所以我才好煩啊,寫個庫最基本的都有問題感覺,所以才來請教大神,有沒有遇到這樣的問題。  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-10-28 13:27 戰(zhàn)魂小筑
@phantom
調用lua用luabridge也就是一句話, 干嘛寫個scriptengine又封裝一層...
你把官方的例子照著跑一遍, 別封裝了, 速度慢不說, 經(jīng)常搞出的錯誤全是自己搞的

代碼能否搞個直接可以編譯的, 給你看代碼比開源代碼都麻煩, 無法編譯  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-10-28 13:36 phantom
注冊的代碼在這
.beginClass<ow::MemBuffer>( "MemBuffer" )
.addFunction( "Size", &ow::MemBuffer::Size )
.addFunction( "Seek", &ow::MemBuffer::Seek )
.addFunction( "Read", &ow::MemBuffer::Read )
.addFunction<owINT32 (ow::MemBuffer::*)( const owVOID*,owINT32 )>( "Write", &ow::MemBuffer::Write )
.addFunction( "Resize", &ow::MemBuffer::Resize )
.addFunction( "Eof", &ow::MemBuffer::Eof )
.addFunction( "GetCurr", &ow::MemBuffer::GetCurr )
.addFunction( "GetBuffer", &ow::MemBuffer::GetBuffer )
.addFunction( "Release", &ow::MemBuffer::Release )
.endClass()
MemBuffer的定義在buffer.h里,單獨測試一下這個write方法就好。  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-10-28 13:42 phantom
我這是用codelite + gcc寫的,要不我做一個vs2010的工程給你看。  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-10-28 13:55 phantom
vs2010下載下來直接就可以編譯,宏我也展開了,方便你看,在init方法里。
http://pan.baidu.com/s/1jGGpPYI  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-10-28 14:00 戰(zhàn)魂小筑
@phantom
engine.CallVoidScript("script_MemBufferWrite",pBuff,(void*)&size,sizeof(int));

你的(void*)&size想表達什么意思? 穿大小就把size傳進去, lua不支持指針!  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-10-28 14:06 phantom
@戰(zhàn)魂小筑
因為那是個數(shù)據(jù)起始地址,我就隨便往buffer里寫4個字節(jié)數(shù)據(jù),就所以就隨便取了一個size變量的地址,傳進去size的大小。假設我在lua里調,buffer:Write("Hello,World!",12)也會崩。這正常嗎?  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-10-28 14:07 戰(zhàn)魂小筑
@phantom
lua不能這么玩, 你先查下資料吧, 腳本沒指針, 無法操作內存,只有常用類型  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-10-28 14:27 phantom
果然是這樣,我又加了個不帶指針的多參方法,沒有此問題了,我去補一下lua相關知識。非常感謝~  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-11-05 17:52 hcaihao
LuaBridge不支持下面特性:
枚舉型常量
不支持8個以上的函數(shù)或方法的調用
重載函數(shù)、方法和構造函數(shù)(Overloaded functions, methods, or constructors)
全局變量(變量必須被包裝在命名空間里)
自動地轉換STL容器類型和Table
在Lua中繼承C++類(Inheriting Lua classes from C++ classes)。
Passing nil to a C++ function that expects a pointer or reference
Standard containers like std::shared_ptr   回復  更多評論
  

# re: 超越luabind的luaBridge 2015-12-03 15:25 super_huai
@戰(zhàn)魂小筑
試用了一下,感覺不錯。但是有wchar_t* 參數(shù)的函數(shù)一直注冊不上,不知道什么原因
void foo( const wchar_t* str )
{
}
luabridge::getGlobalNamespace(L).addFunction("foo", foo );

lua側的代碼

foo("123"); //崩潰了

不知道有什么方法可以解決?  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-12-03 15:26 戰(zhàn)魂小筑
@super_huai
除非你注定主做windows, 否則還是全用char+utf8吧
wchar的東西很煩的  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-12-03 16:03 super_huai
@戰(zhàn)魂小筑
感謝回復
看了luaBridge的說明,是可以做到支持的
## The Lua Stack

In the Lua C API, all operations on the `lua_State` are performed through the
Lua stack. In order to pass parameters back and forth between C++ and Lua,
LuaBridge uses specializations of this template class concept:

template <class T>
struct Stack
{
static void push (lua_State* L, T t);
static T get (lua_State* L, int index);
};

The Stack template class specializations are used automatically for variables,
properties, data members, property members, function arguments and return
values. These basic types are supported:

- `bool`
- `char`, converted to a string of length one.
- `char const*` and `std::string` strings.
- Integers, `float`, and `double`, converted to `Lua_number`.

User-defined types which are convertible to one of the basic types are
possible, simply provide a `Stack <>` specialization in the `luabridge`
namespace for your user-defined type, modeled after the existing types.
For example, here is a specialization for a [juce::String][6]:

template <>
struct Stack <juce::String>
{
static void push (lua_State* L, juce::String s)
{
lua_pushstring (L, s.toUTF8 ());
}

static juce::String get (lua_State* L, int index)
{
return juce::String (luaL_checkstring (L, index));
}
};  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-12-03 16:04 戰(zhàn)魂小筑
@super_huai
真心建議別這樣, 太慢了, 轉來轉去的  回復  更多評論
  

# re: 超越luabind的luaBridge 2015-12-03 16:13 super_huai
@戰(zhàn)魂小筑
因為是從現(xiàn)有的庫做的,該庫操作的全是unicode,全部改造代價太大,所以不得不這么轉
現(xiàn)在實現(xiàn)的方式如下
c++
int Utf8ToT(lua_State *L)
{
size_t n = 0;
char* str = (char*)luaL_checklstring(L, -1, &n);
if(!str) return 0;
tstring strT=UTF82W(str);
lua_pushlstring(L, (const char*)(LPCWSTR)strT.c_str(), (strT.size()+1)*sizeof(wchar_t));
return 1;
}

luabridge::getGlobalNamespace(L)
.addCFunction("A2T", Utf8ToT );

luaL_dostring(L,"function T (str)\n return A2T(str);\nend");//注冊一個全局的"T"函數(shù),用來將utf8編碼的字符串轉換為TCHAR

lua側的代碼

foo(T"123");   回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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在线播放一区二区三区| 国产精品久久久久久影视| 一区二区三区四区五区精品| 亚洲成人在线网站| 欧美国产日韩一区| 99成人在线| 99在线观看免费视频精品观看| 欧美成人免费网| 日韩视频在线观看国产| 最新热久久免费视频| 欧美激情一区三区| 制服丝袜激情欧洲亚洲| 一本色道久久综合狠狠躁篇的优点| 欧美四级在线观看| 欧美一区午夜视频在线观看| 午夜欧美大尺度福利影院在线看| 国产一区再线| 欧美不卡在线| 欧美理论在线| 亚洲一区影院| 先锋影音久久| 亚洲激情在线| 99亚洲伊人久久精品影院红桃| 国产精品草莓在线免费观看| 欧美一区日韩一区| 免费一级欧美片在线播放| 一卡二卡3卡四卡高清精品视频| 一本久道久久综合婷婷鲸鱼| 国产视频一区在线观看一区免费| 裸体一区二区| 欧美日韩另类一区| 久久国产主播精品| 欧美大片在线看免费观看| 香港久久久电影| 蜜桃久久av| 欧美一级日韩一级| 欧美成人午夜激情| 欧美在线黄色| 欧美福利一区| 欧美一区二区在线免费观看| 欧美超级免费视 在线| 亚洲欧美一区二区视频| 久久午夜影视| 亚洲欧美在线免费观看| 免费久久99精品国产自在现线| 亚洲综合国产| 欧美国产精品久久| 久久久伊人欧美| 欧美涩涩网站| 欧美激情精品久久久久久黑人| 国产精品免费福利| 欧美激情精品久久久久久久变态| 国产精品视频yy9299一区| 亚洲国产视频直播| 伊人伊人伊人久久| 亚洲综合精品四区| av成人动漫| 久久字幕精品一区| 久久国产精品久久久久久电车| 免费久久久一本精品久久区| 国产精品九色蝌蚪自拍| 欧美激情片在线观看| 国产亚洲一区在线| 亚洲图片欧美午夜| 夜夜嗨av一区二区三区网站四季av| 美女主播视频一区| 国产日韩欧美自拍| 亚洲一区二区三区免费在线观看| 91久久精品久久国产性色也91| 欧美一区在线视频| 欧美一激情一区二区三区| 欧美亚州在线观看| 亚洲最新色图| 亚洲深夜福利视频| 欧美日韩一区在线观看| 亚洲激情偷拍| 亚洲精品久久久久久久久久久 | 欧美二区乱c少妇| 久久亚洲私人国产精品va| 国产性猛交xxxx免费看久久| 午夜精品久久久久久久99热浪潮| 亚洲欧美日韩一区二区三区在线| 欧美岛国激情| 亚洲国产婷婷| 日韩午夜视频在线观看| 欧美精品久久天天躁| 最新精品在线| 99国产精品视频免费观看| 欧美精品一级| 99日韩精品| 亚洲欧美区自拍先锋| 国产精品蜜臀在线观看| 亚洲欧美综合v| 欧美一区二区三区免费视频| 国产美女一区二区| 午夜精品福利在线观看| 久久久久久一区二区三区| 国产综合精品| 久久男人资源视频| 亚洲第一在线| 亚洲视频在线视频| 国产精品午夜在线| 久久激情综合| 亚洲电影视频在线| 中文在线资源观看网站视频免费不卡| 欧美日韩免费观看一区三区| 中日韩午夜理伦电影免费| 欧美亚洲午夜视频在线观看| 国产视频综合在线| 欧美xxxx在线观看| 中文在线一区| 久久久久亚洲综合| 99精品热6080yy久久 | 久久久夜精品| 亚洲精品国精品久久99热一| 国产精品成人一区二区艾草| 久久精品一区二区三区不卡牛牛| 亚洲第一精品在线| 久久成人精品| 99精品热视频| 亚洲小视频在线观看| 久久视频在线视频| 99视频精品在线| 国产一区清纯| 欧美日韩视频在线第一区| 久久xxxx| 一本大道久久a久久精品综合| 久久美女性网| 亚洲一区免费| 亚洲激精日韩激精欧美精品| 国产精品亚洲综合天堂夜夜| 欧美韩日高清| 久久久噜噜噜久噜久久| 久久国产精品免费一区| 亚洲三级性片| 国产一区二区无遮挡| 欧美美女操人视频| 久久狠狠一本精品综合网| 在线亚洲+欧美+日本专区| 欧美激情中文字幕乱码免费| 久久精品国产96久久久香蕉| 亚洲网站在线观看| 亚洲美女av黄| 亚洲国产精品999| 国外成人在线| 国产日本精品| 国产精品亚洲视频| 欧美午夜视频网站| 欧美激情性爽国产精品17p| 久久国产精品久久久久久| 日韩亚洲成人av在线| 亚洲第一免费播放区| 老司机aⅴ在线精品导航| 欧美在线视频一区二区| 亚洲欧美日韩在线播放| 亚洲性夜色噜噜噜7777| 日韩视频在线观看| 91久久夜色精品国产九色| 一色屋精品视频免费看| 狠狠入ady亚洲精品| 国产主播一区二区| 国产一区二区三区免费不卡| 国产日本欧美一区二区三区| 国产精品嫩草99av在线| 国产精品国产三级国产| 国产精品电影在线观看| 欧美天天视频| 国产精品mm| 国产精品私人影院| 国产精品乱码一区二三区小蝌蚪| 欧美视频网址| 国产精品毛片va一区二区三区| 欧美视频亚洲视频| 国产精品麻豆成人av电影艾秋| 国产精品入口尤物| 国产区精品视频| 在线播放不卡| 亚洲国产婷婷| 亚洲另类在线一区| 亚洲私人影院在线观看| 亚洲综合导航| 欧美一区二区三区在线观看| 久久精品欧美日韩| 麻豆精品视频在线观看视频| 亚洲高清毛片| 亚洲私人影院| 欧美在线黄色| 美国十次成人|