在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
组件工厂
------3D游戏研发
LUA和C之间的函数调用
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_CFunction类型,将函数注册到LUA虚拟机中以后,就可以在LUA中以普通LUA函数的方式被调用。注册一个C函数的步骤如下:
在下面的代码中,我们调用了LUA脚本中的fnEx2函数,返回值从栈中取得,并且要手动出栈。这里,入栈的函数参数会由pcall自动清理。 2.1 LUA测试脚本代码
function fnex2(str_a, num_b, num_c)
print(str_a); return num_b*100 + num_c*10, "Thank you"; end; 2.2 VC代码
//初始化LUA虚拟机
void InitLuaState(lua_State* L) 2.3 工具下面的宏可以简化调用lua函数的代码:
#define CallLuaFunc(FuncName, Params, Results)
3. 从LUA调用C函数示例在下面的例子中,我们注册一个名为rmath的LUA函数,他在C中的函数名为RMath_LUA()3.1 LUA脚本代码
print (">>> LUA程序开始运行了 ");
function fnex3(num_a, num_b) local c = rmath(num_a, num_b); print("LUA PRINTTING:", c); return c; end; 3.2 VC程序代码
//LUA脚本调用C函数
int call_c_function(void) 4. 程序解释4.1 调用LUA脚本中的函数调用LUA脚本函数主要用到如下几个LUA库函数:
);
通过lua_getglobal请求函数(指针)入栈,然后将函数参数按声明顺序入栈,调用lua_pcall执行函数。lua_pcall的第一个参数 指向LUA虚拟机,第二个参数表示栈顶有多少个函数参数,第三个参数表示此函数将返回几个值。(pcall自动清理入栈的参数,返回值则需要手动 pop。) 4.2 从LUA调用C函数主要用到如下几个函数,为求方便您也可以自己定义这样的一个宏。
lua_pushstring(L, "rmath");
lua_pushcfunction(L, RMath_LUA); lua_settable(L, LUA_GLOBALSINDEX);
|
请发表评论