lua调用C函数
??
在Lua中调用C++函数 本教程涵盖了Lua5.1。在Lua的每一个版本中都有一些非常不同之处。下面的示例代码将不能在老版本的Lua下运行。如果你仍然在使用老版本而且不愿意升级,不用担心,我已经在文章底部提供了4.0和5.0教程的源代码下载连接。好了,让我们开始吧! 在本文中我们将用C++创建一个函数,告诉Lua解释器它的情况,最后从Lua中调用它并使用其结果。我在后面也将谈一谈Lua程序中的错误检查。 定义函数 typedef int (*lua_CFunction) (lua_State *L);换句话说,函数必须要以Lua解释器作为唯一的参数,并且返回一个唯一的整数。由于用一个Lua解释器作为参数,因此函数实际上能够从栈中取得任意数量的参数。在后面我们将看到,返回的整数实际上是被压入栈的值的个数。通过如此容易的封装,就能满足你在Lua中调用C++函数的需求。 下面给出的C++函数average()演示了如何接受多个参数且返回超过一个值。记住,该函数是一个与上面typedef相匹配的函数。 lua_gettop函数返回栈顶的索引值。因为在Lua中栈是从1开始编号的,因此该函数获得的值就是参数的个数。 /* 注册函数 */ #include <stdio.h> extern "C" { /* 指向Lua解释器的指针 */ static int average(lua_State *L) /* 循环求参数之和 */ /* 压入平均值 */ /* 压入和 */ /* 返回返回值的个数 */ int main ( int argc,char *argv[] ) /* 载入Lua基本库 */ /* 注册函数 */ /* 运行脚本 */ /* 清除Lua */ /* 暂停 */ return 0; -- call a C++ function avg,sum = average(10,20,30,40,50) print("The average is ",avg) g++ luaavg.cpp -llua -llualib -o luaavg然后,键入下列命令运行: ./luaavg如果没有问题,程序将显示出平均值、和。 在Visual C++你将需要进行下列步骤: 创建一个新的空Win32控制台应用工程。 如果你采用的是dll库,请确保将其放在应用程序的目录中或者windows系统能够找到它的地方。如果你采用的是静态连接库,则不需要。 错误处理 if (!lua_isnumber(L,i)) { lua_pushstring(L,"Incorrect argument to 'average'"); lua_error(L); } 添加这样的检查很容易,同时这样也让调试更容易。当处理用两种不同语言编写的程序的时候,这显得相当重要。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |