哪位提供个linux C里 调用lua的简单例子

哪位提供个linux C里 调用lua的简单例子,第1张

这个问提之前我已经回答过了,先上一张我厂大拿分享的知识:

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,调用出错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10035743.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-04
下一篇2023-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存