lua如何调用C++函数】的更多相关文章

第一步是定义函数.所有在Lua中被调用的C/C++函数将使用下面一类指针进行调用: typedef int (*lua_CFunction) (lua_State *L); 换句话说,函数必须要以Lua解释器作为唯一的参数,并且返回一个唯一的整数.由于用一个Lua解释器作为参数,因此函数实际上能够从栈中取得任意数量的参数. 在后面我们将看到,返回的整数实际上是被压入栈的值的个数.通过如此容易的封装,就能满足你在Lua中调用C++函数的需求. 下面给出的C++函数average()演示了如何接受多…
Lua利用一个虚拟的堆栈来给C传递值或从C获取值.每当Lua调用C函数,都会获得一个新的堆栈,该堆栈初始包含所有的调用C函数所需要的参数值(Lua传给C函数的调用实参),并且C函数执行完毕后,会把返回值压入这个栈(Lua从中拿到C函数调用结果). 于此相关的C API有几个比较重要的定义如下: (1)typedef struct lua_State lua_State; lua虚拟机(或叫解释器),可以理解为一个thread,和一个完整的Lua虚拟环境的执行状态. (2)typedef int…
Lua能够调用C函数的能力将极大的提高Lua的可扩展性和可用性. 对于有些和操作系统相关的功能,或者是对效率要求较高的模块,我们全然能够通过C函数来实现,之后再通过Lua调用指定的C函数. 对于那些可被Lua调用的C函数而言,其接口必须遵循Lua要求的形式,即typedef int (*lua_CFunction)(lua_State* L). 简单说明一下,该函数类型只包括一个表示Lua环境的指针作为其唯一的參数,实现者能够通过该指针进一步获取Lua代码中实际传入的參数.返回值是整型,表示该C…
lua中调用C++函数 我们产品中提供了很多lua-C API给用户在lua中调用,之前一直没用深究其实现原理,只是根据已有的代码在编码.显然这不是一个好的习惯,没用达到知其所以然的目的. 一.基本原理 将C++函数编译成动态链接库,然后在lua中require,通过下面的示例进行详解. #ifdef __cplusplus extern "C" { #endif #include<lua.h> #include<lualib.h> #include<la…
一直想学学cocos2dx中如何使用tolua++工具使得lua脚本调用C++函数,今天就来搞一下,顺便记录下来: 首先,我们打开cocos2dx-2.2.4中projects下的test的VS工程,可以看到这个例子里面已经有一个HelloWorld的类,我们就用它来说明一下. 然后,我们照着HelloWorld类的定义来写pkg文件: //MyClass.pkg class HelloWorld : public cocos2d::CCLayer { virtual bool init();…
原文: http://www.cnblogs.com/stephen-liu74/archive/2012/07/23/2469902.html Lua可以调用C函数的能力将极大的提高Lua的可扩展性和可用性.对于有些和操作系统相关的功能,或者是对效率要求较高的模块,我们完全可以通过C函数来实现,之后再通过Lua调用指定的C函数.对于那些可被Lua调用的C函数而言,其接口必须遵循Lua要求的形式,即typedef int (*lua_CFunction)(lua_State* L).简单说明一下…
cocos2d-x内部使用tolua进行lua绑定,但是引擎并没有提供一个通用的接口让我们可以把一个lua函数注册给C++层面的回调事件.翻看引擎的lua绑定代码,我们可以仿照引擎中的方法来做.值得吐槽的是,这套流程在开发中几乎是不可避免的,而cocos2d-x竟然不把它作为一个公用接口暴露给开发者,而需要我自己动手,真是无奈. 下面以一个简单的消息分发类为例子,演示如何完成这一工作. MessageDispatcher.h class MessageDispather { public: st…
cocos2d-x内部使用tolua进行lua绑定.可是引擎并没有提供一个通用的接口让我们能够把一个lua函数注冊给C++层面的回调事件. 翻看引擎的lua绑定代码,我们能够仿照引擎中的方法来做. 值得吐槽的是.这套流程在开发中差点儿是不可避免的,而cocos2d-x居然不把它作为一个公用接口暴露给开发人员,而须要我自己动手,真是无奈. 以下以一个简单的消息分发类为样例,演示怎样完毕这一工作. MessageDispatcher.h class MessageDispather { public…
xLua是腾讯的一个开源项目,为Unity. .Net. Mono等C#环境增加Lua脚本编程的能力.本文主要是探讨xLua下Lua调用C#的实现原理. Lua与C#数据通信机制 无论是Lua调用C#,还是C#调用Lua,都需要一个通信机制,来完成数据的传递.而Lua本身就是由C语言编写的,所以它出生自带一个和C/C++的通信机制. Lua和C/C++的数据交互通过栈进行,操作数据时,首先将数据拷贝到"栈"上,然后获取数据,栈中的每个数据通过索引值进行定位,索引值为正时表示相对于栈底的…
前面讲了一下,C++读取lua文件中的变量,包括一维表.二维表这些,这节讲一下如何在lua文件中去调用C++函数 C++代码如下 #include <stdio.h> extern "C"{ #include "lua.h" #include "lualib.h" #include "lauxlib.h" } /*Lua 解释器指针 */ lua_State* L; static int average(lua_S…