lua
2019-11-19 18:29:16

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

59 / 0 / 0 / 0

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 <string.h>
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

PS: 如本文对您有疑惑,可加QQ:1752338621 进行讨论。

0 条评论

0
0
官方
微信
官方微信
Q Q
咨询
意见
反馈
返回
顶部