所有能在lua中调用的c/c++函数都必须是遵循lua定义的函数原型:typedef int (*lua_CFunction) (lua_State *L),其中返回值整型int表示,函数返回值个数。lua调用c/c++函数,他们之间的交互依然通过lua栈,而且需要认识到的是,无论是lua调用c函数,还是c/c++调用lua函数,他们之间的交互用的栈并不是全局栈,每个函数都维护着一个自己的私有栈,所有的交互数据均保存在这个私有栈中。
当lua调用c函数时,lua把所有参数都压进函数的私有栈中,并且第一个参数在栈中的位置必定为index=1,第二个参数为index=2,以此类推,的位置。c函数需要从栈中取得参数,在完成相关处理后把处理结果压入私有栈中。返回结果在理论上可以是任意数目,在c函数的最后必须返回代表结果的个数。
测试代码:
lua代码:testGlueLua.lua
myFile = io.open( "io.lua", "w" )
if myFile ~= nil then
myFile:write( "pow: ")
myFile:write( MyPow( 3, 2 ) )
end
io.close( myFile )
c++代码:test.cpp
//测试lua开发库
//1.新建一个lua_state 并初始化环境
//2.加载相关lua程序库
//3.加载执行lua文件
//4.查询要执行的函数,参数入栈
//5.执行函数
//6.从lua栈中提取返回值
#include <iostream>
extern "C" //采用c编译方式
{
#include &l

本文详细介绍了如何在Lua中调用C/C++函数,这些函数需遵循lua_CFunction原型,返回值表示返回参数个数。每个函数都有独立的栈,参数通过栈交互,lua调用时参数按顺序压栈,C/C++函数从栈获取并处理,最终将结果返回。提供了一段测试代码作为示例。
最低0.47元/天 解锁文章

503

被折叠的 条评论
为什么被折叠?



