LUA函数和C函数的相互调用
本文转自:http://blog.csdn.net/mrtechno/archive/2007/01/31/1498554.aspx ? 1. 简介1.1 从C程序调用LUA函数LUA的函数和普通变量一样也是First Class Variable类型,可以看作函数指针变量参与栈操作。因此调用过程分为如下几个步骤:
1.2 从LUA脚本调用C函数LUA没有提供PYTHON那样丰富的类库,因此复杂的功能需要在C程序中定义好,然后通过lua决定调用时机。在LUA库中定义了可以被LUA虚拟机识别的C函数模型:
int functionName (lua_State* L) {....; return 1;}
这样就可以在LUA中用myFunInLua()来调用C中的int myFunInC()了 ? 2. 从C调用LUA函数示例在下面的代码中,我们调用了LUA脚本中的fnEx2函数,返回值从栈中取得,并且要手动出栈。这里,入栈的函数参数会由pcall自动清理。 2.1 LUA测试脚本代码2.2 VC代码? 2.3 工具下面的宏可以简化调用lua函数的代码: 3. 从LUA调用C函数示例在下面的例子中,我们注册一个名为rmath的LUA函数,他在C中的函数名为RMath_LUA() 3.1 LUA脚本代码3.2 VC程序代码
4. 程序解释4.1 调用LUA脚本中的函数调用LUA脚本函数主要用到如下几个LUA库函数: 通过lua_getglobal请求函数(指针)入栈,然后将函数参数按声明顺序入栈,调用lua_pcall执行函数。lua_pcall的第一个参数 指向LUA虚拟机,第二个参数表示栈顶有多少个函数参数,第三个参数表示此函数将返回几个值。(pcall自动清理入栈的参数,返回值则需要手动 pop。) 4.2 从LUA调用C函数主要用到如下几个函数,为求方便您也可以自己定义这样的一个宏。
这样就可以在lua脚本中调用rmath()函数了。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |