lua不同模块调用

一、起因

由于准备把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


原文地址:https://www.cnblogs.com/qitian1/p/6461981.html