在当前解决方案下创建C++ Win32控制台程序,便于和Lua源码调试。
我创建的是HelloLua项目,右键HelloLua属性
C/C++ 常规---附加包含目录,添加LuaSrc目录
链接器—常规,添加生成的Lua5.3.4.lib目录
链接器---输入---依赖项
OK,Lua的环境属性配好了,如果有C++开发经验的应该很熟悉该流程。
下面编写代码:
扫描二维码关注公众号,回复:
4854601 查看本文章
// HelloLua.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
/*
C++ 调用 Lua
*/
// 这是个C++程序, 所以要extern "C", 因为lua的头文件都是C格式的
extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
int main()
{
lua_State* L;
//初始化lua,在5.2版本之前是用lua_open函数,发现这个函数在5.2中已经被遗弃,
//被新的函数luaL_newstate和lua_newstate替代。lua_newstate可自定义内存分配函数,
//luaL_newstate使用默认的内存分配方式.
L = luaL_newstate();
luaopen_base(L);
//load Lua base libraries
luaL_openlibs(L);
//加载1.lua文件,之前的版本luaL_dofile()函数的第二个参数要写绝对路径,否则执行后会提示“unprotected error in call to lua api(attampt to call a nil value)”错误
luaL_dofile(L, "1.lua");
//获取Lua脚本中的函数名
lua_getglobal(L, "add");
//传参,传入第一个参数
lua_pushnumber(L, 3);
//传入第二个参数
lua_pushnumber(L, 4);
//调用函数:带有2个参数和1个返回值
lua_call(L, 2, 1);
//获取调用结果
int sum = (int)lua_tonumber(L, -1);
lua_pop(L, 1);
cout << "The sum is " << sum << endl;
//cleanup Lua
lua_close(L);
system("pause");
return 0;
}
输出如下
代码没什么难度,大家自行理解,到此,源码编译OK,C++程序也写好了,那么就以这两个程序,由外而内剖析Lua源码。