通过c++调用lua 脚本, 环境VC++6.0 lua sdk 5.1 在调用前 先认识几个函数。 1. 调用lua_open()将创建一个指向Lua解释器的指针。 2. luaL_openlibs()函数加载Lua库。 3. 使用luaL_dofile()加载脚本并运行脚本。 4. lua_close()来关闭Lua指向解释器的指针。 5. 调用lua_getglobal()将add()函数压入栈顶,add()为lua函数。 6. 第一个参数x,通过调用lua_pushnumber()入栈。 7. 再次调用lua_pushnumber()将第二个参数入栈。 8. 使用lua_call()调用Lua函数。 9. 调用lua_tonumber()从栈顶取得函数的返回值。 10. lua_pop()移除栈顶的值。 代码 add.lua 1function add ( x, y ) 2 return x + y 3end 4 main.cpp #include <stdio.h> extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" } /* the Lua interpreter */ lua_State * L; int luaadd ( int x, int y ) { int sum; //函数名 lua_getglobal(L, "add"); //第一个参数压栈 lua_pushnumber(L, x); //第二个参数压栈 lua_pushnumber(L, y); //调用函数 lua_call(L, 2, 1); //得到返回值 sum = (int)lua_tonumber(L, -1); lua_pop(L, 1); return sum; } int main ( int argc, char *argv[] ) { int sum; //创建一个指向Lua解释器的指针。 L = lua_open(); //函数加载Lua库 luaL_openlibs(L); //加载脚本 luaL_dofile(L,"add.lua"); //调用函数 sum = luaadd( 10, 11); // print the result printf( "The sum is %d\n", sum ); //关闭 释放资源 lua_close(L); return 0; } 注意问题: 1.工程头文件lua.h等,编译器能找到,可以通过工具来设置头文件路径。 2. 添加lua5.1.lib到Object/library modules列表中。 测试结果 The sum is 21 关于lua的认识 http://www./expter/archive/2008/12/24/70224.html |
|