lua 进阶3--lua文件中调用C++函数
前面讲了一下,C++读取lua文件中的变量,包括一维表、二维表这些,这节讲一下如何在lua文件中去调用C++函数 C++代码如下 #include <stdio.h> extern "C"{ #include "lua.h" #include "lualib.h" #include "lauxlib.h" } /*Lua 解释器指针 */ lua_State* L; static int average(lua_State *L) { /*得到参数个数*/ int n=lua_gettop(L); double sum=0; int i; for(i=1;i<=n;i++) { if(!lua_isnumber(L,i)) { lua_pushstring(L,"Incorrect argument to 'average'"); printf("%sn",lua_tostring(L,i); printf("%sn","is not a number"); } else { sum+=lua_tonumber(L,i); } } /*压入平均值*/ lua_pushnumber(L,sum/n); /*压入和*/ lua_pushnumber(L,sum); /*返回返回值的个数*/ return 2; } int main ( int argc,char *argv[] ){ /*初始化Lua */ L=lua_open(); /*载入lua基本库*/ luaL_openlibs(L); lua_register(L,"average",average); /*运行脚本 */ luaL_dofile(L,"test.lua"); /*清除Lua */ lua_close(L); /*暂停*/ printf("Press enter to exit .."); getchar(); return 0; }lua 文件(test.lua)的代码如下 --call a C++ function avg,sum = average(10,20,30,40,50,"ssss") print("The average is ",avg) print("The sum is",sum) 注意 最主要的是 要写一个能让Lua调用的C函数,就要符合lua_CFunction定义:typedef int (*lua_CFunction) (lua_State *L); 上面定义的C函数是 static int average(lua_State *L)? static 可要可不要 static 函数只表示在当前文件中可用,在其他文件中不可用 ? /*压入平均值*/ 如果返回值有多个 比如3个 那么一定要return 3 否则的话(比如还是return 2,那么有一个返回值获取不到 而且返回值顺序也不对应) 不成功 ? ? lua_register(L,average); //? 第二个参数表示提供给lua文件的接口 第三个参数 C++中的函数名 初学lua 还不是特别熟,现在还是应用阶段,只能慢慢去深入 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |