一、起因
由于准备把lua加入的系统中,还需把字符串解析json。下了个json的lua,目前还没有搞定。但是一个lua,调用其他lua文件模块,目前刚刚搞定。
暂作记录。
二、 模块调用测试
1. add.lua,测试文件,被调用文件,内容简单如下:
-- local print=print print ("start add function") -- module("add") function sum(x,y) print ("the result output:sum =",x,"+",y) local x = x local y = y return x + y end -- sum() -- --标识类名 创建一个类 complex = {sum = sum}
2. test.lua,此文件为vs2012 c++直接调用的测试lua文件文件。
local l_print = print l_print('start test...') -- local _G = _G -- package.loaded["add"] = nil function use_sum() t = require "add" l_print(t) l_print("require add is ok--") local requirecomplex = {} requirecomplex = complex local result = requirecomplex.sum(5,3) -- local result = add.sum(5,2) l_print(result) l_print("--------good news :use add is ok! --------------") return result end
可以看出,require了add文件,并调用了其他的sum函数。
3. c++代码编写
// lua_test.cpp : 定义控制台应用程序的入口点。 #include <stdio.h> #include <iostream> #include <string> #define luac_c #define LUA_CORE #include "lua.h" #include "lauxlib.h" #include "lualib.h" int luaAdd(int x, int y); lua_State *L; int main(int argc, char *argv[]) { int sum = 0; L = luaL_newstate(); luaL_openlibs(L); luaL_loadfile(L, "test.lua"); lua_pcall(L, 0, LUA_MULTRET, 0); lua_getglobal(L, "use_sum"); //lua_call(L, 0, 1); lua_pcall(L, 0, LUA_MULTRET, 0); int reuslt = (int)lua_tonumber(L,-1); lua_pop(L, 1); lua_close(L); return 0; } int luaAdd(int x, int y) { int sum = 0; 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; }
本次测试使用的为lua5.2.3.lib的版本。因为lua版本不一样,有的函数名字都没有了。郁闷。
测试结果:
希望以后有机会多用用。看了其他的人blog,lua的效率还是很高的。因为都是栈处理过程。
希望高手指点啊! 我的json 转换还没有搞定。
免分资源文件路径:http://download.csdn.net/detail/cartzhang/7352313 lua调用免分工程vs2012