C/C++ 调用 Lua (学习随笔)

下载:

编程环境:VS2013 - Win32控制台空项目    访问密码 4319

Lua版本:lua-5.3.3    访问密码 849b


编译:

下载好lua库以后,将其解压加载至工程,编译前,将库文件中 lua.c & luac.c 里的主函数(main)注释掉,或删除该文件,就可以正常编译了。


调用:

主函数文件 - code.c 

#include "lua.h"  
#include "lualib.h"  
#include "lauxlib.h"  
#include "luaconf.h"  

#include  

lua_State* L;
int add(lua_State* L)
{
	lua_Integer x = luaL_checkinteger(L, 1);
	lua_Integer y = luaL_checkinteger(L, 2);
	printf("from C result:%d\n", x + y);
	return 1;
} 

LUA_NUMBER lua_add(void)
{
	/* 获取L中的 lua_add函数 即 加载脚本中的 lua_add函数 */
	lua_getglobal(L, "lua_add");
	/* 压栈 即传参*/
	lua_pushnumber(L, 2);
	/* 压栈 即传参*/
	lua_pushnumber(L, 2);
	/* 调用当前加载函数,传入2个参数,期望获取1个返回值*/
	lua_call(L, 2, 1);
	/* 获取返回值 */
	LUA_NUMBER sum = lua_tonumber(L, -1);
	/* 弹栈 */
	lua_pop(L, 1);
	return sum;
}

int main(int argc, char *argv[]) {
	
	LUA_NUMBER sum;
	// lua脚本地址
	char path[256] = "F:/VSPro/love/Debug/727057301.lua";

	/* 分配空间 */
	L = luaL_newstate();  
	/* 加载库 */
	luaL_openlibs(L);
	/* 加载函数地址到 L 中 */
	lua_pushcfunction(L, add);
	/* 为函数地址设置调用名称 */
	lua_setglobal(L, "ADD");
	/* 加载lua脚本 */
	if (luaL_dofile(L, path))
	{
		printf("error\n");
		getchar();
		return 1;
	}
#if 1
	sum = lua_add();
	printf("%lf", sum);
#else
	
	lua_pcall(L, 0, 0, 0);
	lua_getglobal(L, "lua_add"); 
	lua_pcall(L, 0, 0, 0);

#endif
	lua_close(L);
	getchar();
	return 0;
}


lua文件 - 727057301.lua


-- add two numbers 
function lua_add ( x, y ) 
 print("from lua lua_add")
-- print(x)
-- print(y)
 ADD(2,3)
 return x + y 
end 



附工程源码以供大家调试学习

lua调用应用   访问密码 19e0





你可能感兴趣的:(《C++,必知必会》)