Lua中调用C/C++函数
翻译自http://gamedevgeek.com/tutorials/calling-c-functions-from-lua/ 在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)) { (本文由Groov0V翻译,转载请指明出处!) ?
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |