lua呼叫c 的函式 使用tolua

2021-06-27 17:09:53 字數 1637 閱讀 9667

1.定義c++類與函式

#include class cppfunctions

;

#include "cppfunctions.h"

#include #include //使用linux下獲取時間的函式

double cppfunctions::getcurrenttime()

2.繫結

我新建了乙個tolua.h和乙個tolua.cpp

tolua.h中

#include "tolua++.h"

int tolua_userclass_open(lua_state* tolua_s);

tolua.cpp中

#include "tolua.h"

#include "cocos2d.h"

#include "cppfunctions.h"

using namespace std;

using namespace cocos2d;

//自定義的註冊函式tolua_reg_user_types。用來註冊自定義類cppfunctions

static void tolua_reg_user_types (lua_state* tolua_s)

#pragma mark -

#pragma mark cppfunctions

//自定義函式tolua_collect_cppfunctions,通過解析器tolua_s釋放函式物件

static int tolua_collect_cppfunctions(lua_state* tolua_s)

//註冊函式

static int tolua_cppfunctions_getcurrenttime(lua_state* tolua_s)

tolua_api int tolua_userclass_open(lua_state* tolua_s)

3.註冊lua引擎

#include "tolua/tolua.h"    //呼叫c++的函式
//找到下面**,加入紅色的一行

// register lua engine

ccluaengine* pengine = ccluaengine::defaultengine();

ccscriptenginemanager::sharedmanager()->setscriptengine(pengine);

ccluastack *pstack = pengine->getluastack();

//-------用於呼叫c++函式

tolua_userclass_open(pstack->getluastate());

//-------

lua_state *tolua_s = pstack->getluastate();

tolua_extensions_ccb_open(tolua_s);

4.在lua中使用

cppfunctions:getcurrenttime()

lua呼叫c函式

最近在進入lua程式設計的狀態,一度令我困惑的是,lua提供的功能少的可憐,跟自備電池的python相比,可說是簡陋了。連table的列印,都需要自己實現,也因此有了一打的第三方方案。後來我想明白了,以lua和c如此緊密的關係,只需要建立lua的binding,那麼豐富而效能強大的c庫資源完全可以為...

lua呼叫c函式

lua可以呼叫c函式的能力將極大的提高lua的可擴充套件性和可用性。對於有些和作業系統相關的功能,或者是對效率要求較高的模組,我們完全可以通過c函式來實現,之後再通過lua呼叫指定的c函式。對於那些可被lua呼叫的c函式而言,其介面必須遵循lua要求的形式,即 typedef int lua cfu...

lua呼叫C函式

lua採取的是利用棧進行互動,利用各種lua push 將不同的值壓入棧中,然後呼叫lua指令碼時自然會退棧取出引數執行,對於lua的虛擬機器來說,就像是發生了一次正常的函式呼叫。這裡採用的棧是lua棧,因為若是c棧的話呼叫lua的c api就會出錯了。需要注意的是,lua棧狀態需要自己進行維護,若...