lua入门教程:第五章 C API c语言调用lua代码

Lua 可以作为程序库用来扩展应用的功能,也就是 Lua 可以作为扩展性语言的原因所在。同时,Lua 程序中可以注册有其他语言实现的函数,这些函数可能由 C 语言(或其他语言)实现,可以增加一些不容易由 Lua 实现的功能。这使得 Lua 是可扩展的。与上面两种观点(Lua 作为扩展性语言和可扩展的语言)对应的 C 和 Lua 中间有两种交互方式。

  • 第一种,C 作为应用程序语言,Lua 作为一个库使用;

  • 第二种,反过来,Lua 作为程序语言,C 作为库使用。

这两种方式,C 语言都使用相同的 API 与 Lua 通信,因此 C 和Lua 交互这部分称为 C API。

c语言调用lua代码

这种形式是最简单的,通过他可以来看看c语言调用lua的流程,如下:

  • 初始化Lua环境: lua_newstate

  • 加载Lua标准库: Lua_openlibs

  • 加载Lua和函数:luaL_loadbuffer

  • 执行函数:lua_pcall

  • 获取返回值:从栈中弹出返回值 lua_pop()

  • 关闭Lua状态机:lua_close()

看下如下的代码:

#include "stdafx.h"

extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#include "luaconf.h"
};

#include 
int main()
{
	const char* buff = "print(\"hello\")";
	int error;
	lua_State* L = luaL_newstate();
	luaL_openlibs(L);
	
	error = luaL_loadbuffer(L, buff, strlen(buff), "line") || lua_pcall(L, 0, 0, 0);

	int s = lua_gettop(L);
	if (error) {
		fprintf(stderr, "%s", lua_tostring(L, -1));
		lua_pop(L, 1);

	}
	
	lua_close(L);

    return 0;
}

在这里我们引进了一些头文件,

  • lua.h中定义的是最基础的API;

  • lauxlib.h中的函数都以luaL_开头,他们是比基础API更抽象的函数;

  • lualib.h中定义了打开标准类库的API,比如luaL_openlibs(L)。

程序的结果打印lua的代码:

hello

你可能感兴趣的:(lua入门教程,lua)