cocos2dx中註冊導出c++函數供lua調用(使用tolua++)

弄了半天終於搞定了,網上有很多相似的帖子,但可能由於我基礎不好,總是出錯,最後搞定了。

參考http://www.cnblogs.com/mrblue/archive/2013/06/08/3126997.html,機器是windowsxp,VS2010

這種方法是不依賴於cocos2dx引擎中的LuaCocos2d.cpp,而完全在別處建立一個新的相同功能的cpp文件。

只需要以下幾步即可:


1,創建自己的類(當然)

2,爲了以後創建用來與lua交互的中間類MyCToL.cpp(先不創建),先創建他的頭文件MyCToL.h

3,創建總的pkg文件

4,爲要添加的新類創建pkg文件

5,用cmd編譯一下

6,在AppDelegate.cpp中添加一行代碼,註冊一下


現在,一步步開始實現,爲了快速看到效果,一切從簡吧

1,創建自己的類

因爲頭文件中也可以定義類,爲了簡便,都寫在一個頭文件MyClass.h中

class MyClass
{
public:
	MyClass(){};
	static int f(int a){return 10;};
};

2,創建MyCTol.h

#ifndef __MY_CPPTOLUA_H_
#define __MY_CPPTOLUA_H_


extern "C" {
#include "tolua++.h"
#include "tolua_fix.h"
}
#include "MyClass.h" 
TOLUA_API int tolua_MyCToL_open(lua_State* tolua_S);
#endif // __MY_CPPTOLUA_H_
3,創建總的pkg文件

$#include "MyCToL.h"
 
$pfile "MyClass.pkg"
先創建記事本,再將上面兩行代碼copy進去,之後把後綴名改爲.pkg就可以了

4,創建新類的pkg文件

class MyClass
{
static int f(int a);
};
5,使用cmd編譯

將根目錄下的tolua++下的tolua++.zip解壓,可以得到tolua++.exe文件,將它和上面創建的那些文件放在一起。

在cmd中cd過去,輸入tolua++ -tCocos2d -o MyCToL.cpp MyCToL.pkg 回車,等命令執行完之後去目錄中看,多了一個MyCToL.cpp文件,將它拖到項目裏

6,在AppDelegate.cpp中註冊

在CCLuaEngine* pEngine = CCLuaEngine::defaultEngine();下面一行添加

tolua_MyCToL_open(pEngine->getLuaStack()->getLuaState());

同時,在頂部加上他的頭文件

運行一下,如果是提示 未能加載MyCToL.h No Such direct之類的,應該是頭文件路徑與appDelegate不是同一目錄,可以參考我之前一篇文章:)http://blog.csdn.net/bark2003/article/details/20776553

在lua中測試一下

local aaa= MyClass:f(3)
CCLuaLog(aaa)

結果顯示正常,終於通了。。


轉載請保留原文地址http://blog.csdn.net/bark2003/article/details/20780653


發佈了35 篇原創文章 · 獲贊 11 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章