
这个问提之前我已经回答过了,先上一张我厂大拿分享的知识:
gcc -o hello helloc -I /usr/include/lua51/
编译成可执行文件,-I后面是我linux上库依赖的头文件地址
楼主可参考下,望对你有所帮助!
如何在cocos2d c++代码中调用lua
在AppDelegate 中加入了
#include"Lua_extensions_CCBh"
#include"CCLuaEngineh"
#include"Lua_web_socketh"
查到代码加载lua脚步引擎
官方原话注册引擎
CCLuaEnginepEngine=CCLuaEngine::defaultEngine();
CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);
和ccb有关的lua
CCLuaStackpStack=pEngine->getLuaStack();
lua_Statetolua_s=pStack->getLuaState();
tolua_extensions_ccb_open(tolua_s);
和web_socket 相关的lua
pStack=pEngine->getLuaStack();
tolua_s=pStack->getLuaState();
tolua_web_socket_open(tolua_s);
pEngine->executeScriptFile("luaScript/controllerlua");
结束
打开luaScript/controllerlua仔细研究
-- avoidmemory leak
collectgarbage("setpause",100)
collectgarbage("setstepmul",5000)
require"luaScript/mainMenu"
----------------
-- run
local scene =CCScene:create()
scene:addChild(CreateTestMenu())
CCDirector:sharedDirector():runWithScene(scene)
到这里如果熟悉cocos2dx 的朋友就很熟悉了
不错,这里是cocos2d中lua的使用方法和c++中调用差别不大!
但是还没有完
Cocos2dx 对lua的封装是很好的!
如果不熟悉c++与lua的绑定的代码下面的不建议看
C++与lua的绑定传送门
关于cocos2d 与 lua绑定的代码的探究
//打开"CCLuaEngineh"
单例实现CCScripEngineProtocol
后期应该支持不仅仅只是lua的脚本引擎
头文件有很多方法
挑一个看看
virtualintexecuteNodeEvent(CCNodepNode,intnAction);
intCCLuaEngine::executeNodeEvent(CCNodepNode,intnAction)
{
intnHandler=pNode->getScriptHandler();
if(!nHandler)return0;
switch(nAction)
{
casekCCNodeOnEnter:
m_stack->pushString("enter");
break;
casekCCNodeOnExit:
m_stack->pushString("exit");
break;
casekCCNodeOnEnterTransitionDidFinish:
m_stack->pushString("enterTransitionFinish");
break;
casekCCNodeOnExitTransitionDidStart:
m_stack->pushString("exitTransitionStart");
break;
casekCCNodeOnCleanup:
m_stack->pushString("cleanup");
break;
default:
return0;
}
intret=m_stack->executeFunctionByHandler(nHandler,1);
m_stack->clean();
returnret;
}
这里是进入CCNode后的一些消息函数的处理
不管
intret=m_stack->executeFunctionByHandler(nHandler,1);
最终是回到了CCLuaStack
调用了executeFunctionByHandler(nHandler,1);
继续探究
intCCLuaStack::executeFunctionByHandler(intnHandler,intnumArgs)
{
intret=0;
if(pushFunctionByHandler(nHandler)) / L: arg1 arg2 func /
{
if(numArgs>0)
{
lua_insert(m_state,-(numArgs+1)); / L: func arg1 arg2 /
}
ret=executeFunction(numArgs);
}
lua_settop(m_state,0);
returnret;
}
可以看到一些和lua与c++联系的代码了
看看这个类的初始化
boolCCLuaStack::init(void)
{
m_state=lua_open();
luaL_openlibs(m_state);
tolua_Cocos2d_open(m_state);
toluafix_open(m_state);
// Register our version of the global "print"function
constluaL_regglobal_functions[]={
{"print",lua_print},
{NULL,NULL}
};
luaL_register(m_state,"_G",global_functions);
tolua_CocoStudio_open(m_state);
#if(CC_TARGET_PLATFORM==CC_PLATFORM_IOS||CC_TARGET_PLATFORM==CC_PLATFORM_MAC)
CCLuaObjcBridge::luaopen_luaoc(m_state);
#endif
register_all_cocos2dx_manual(m_state);
register_all_cocos2dx_extension_manual(m_state);
register_all_cocos2dx_studio_manual(m_state);
// add cocos2dx loader
addLuaLoader(cocos2dx_lua_loader);
returntrue;
}
这个里的方法看名称应该是注册 coco2dx 中的类到
C++中
register_all_cocos2dx_manual(m_state);
register_all_cocos2dx_extension_manual(m_state);
register_all_cocos2dx_studio_manual(m_state);
详细看
Coco2dx-studio 先不看
头文件
lua_cocos2dx_manualh
#ifdef__cplusplus
extern"C"{
#endif
#include"tolua++h"
#ifdef__cplusplus
}
#endif
LUA_APIintregister_all_cocos2dx_manual(lua_Statetolua_S);
头文件
lua_cocos2dx_extensions_manual
#ifdef__cplusplus
extern"C"{
#endif
#include"tolua++h"
#ifdef__cplusplus
}
#endif
LUA_APIintregister_all_cocos2dx_extension_manual(lua_Statetolua_S);
惊人的相似
看看tolua++h
真相快水落石出了
这里定义了lua所以用到全部函数
这里是头部,
/ tolua
Support code for Lua bindings
Written by Waldemar Celes
TeCGraf/PUC-Rio
Apr 2003
$Id: $
/
/ This code is free software; you can redistributeit and/or modify it
The software provided hereunder is on an"as is" basis, and
the author has no obligation to providemaintenance, support, updates,
enhancements, or modifications
/
原来tolua也是lua封装起来的函数库,大师2003 4月就写好了
相当的牛
好上面只看了lua_cocos2dx_extensions_manualh的头文件
cpp文件我们也一看详情
我发现注册了一些函数
但是不是全部
在CCLuaStack::init()
方法里还有
tolua_Cocos2d_open(m_state);
这个方法
相应的头文件是LuaCocos2dh
可以打开看看详情
Luacocos2dcpp注册了n多函数
我用注册是相对于lua而言
Luacocos2dcpp代码贼多
有兴趣的童鞋可以看看
看来什么时间要看看cocos2d studio 的代码
紧跟时代的步伐
不能老是cocos builder
你这个libtestso入口点是符合lua调用规范的吗?请参考programming in lua那本书的例子写lua扩展。参考swig的例子也可以。 当然,如果说函数未定义,是不是版本不符合,好像lua最新版本跟上一个版本api差异很大。
要是你只想调用一个程序的话,我觉得可以把你那个程序编译以后,用osexecute ([command])这个函数执行。
This function is equivalent to the C function system It passes command to be executed by an operating system shell It returns a status code, which is system-dependent If command is absent, then it returns nonzero if a shell is available and zero otherwise
比如你那个程序编译以后叫“aexe”且和lua程序在同一目录,然后你在lua里直接些osexecute("//aexe")就好了。
对象无法传
你看Lua的教程就知道了
Lua支持的不是C++ 是C 而且不是所有的C都支持
本身Lua是用标准C语言开发 所以也只能实现C语言的功能 C++就已经超出范围了
所以要把对象放进去 必须按照一定的格式 逐个把函数和参数放进去 再到Lua按顺序逐个取出
以上就是关于哪位提供个linux C里 调用lua的简单例子全部的内容,包括:哪位提供个linux C里 调用lua的简单例子、如何在cocos2d c++代码中调用lua以及探究、求助,c调用lua的问题,lua脚本中加了require,调用出错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)