lua和C相互调用

lua可以通过与C函数相互调用来扩展程序功能,在C中嵌入lua脚本既可以让用户在不重新编译代码的情况下修改lua代码更新程序,也可以给用户提供一个自由定制的接口,这种方法遵循了机制与策略分离的原则。在lua中调用C函数可以提高程序的开发效率,lua与C的相互调用在工程中相当实用。

lua和c之间的相互是通过一个抽象的栈来进行交互的。



1. lua和c相互调用的api:

todo


2. 应用

这种lua和c相互调用的方式,可以实现一下很方便的功能。把lua脚本作为功能插件,配置化的植入到cpp的程序中。比如在游戏中,使用某个道具可以给角色加经验,可以把addexp(100)这段lua代码作为配置,当使用道具的时候,就通过cpp调用这段lua去执行。 >完整实例代码

int exec_buff(ACTOR * actor)
{
    lua_State* L = luaL_newstate();
    luaL_openlibs(L);

    // 将指定的函数注册为Lua的全局函数变量,其中第一个字符串参数为Lua代码
    // 在调用C函数时使用的全局函数名,第二个参数为实际C函数的指针。
    lua_register(L, "addexp", addexp);

    lua_env_set(actor);

    // 在注册完所有的C函数之后,即可在Lua的代码块中使用这些已经注册的C函数了。
    if (luaL_dostring(L, actor->lua_str.c_str()))
    {
        printf("Failed to invoke.\n");
    }

    lua_env_unset();
    lua_close(L);
    printf("actor exec lua buff end \n");
    return 0;
}

int main()
{
    ACTOR * actor = new ACTOR();
    actor->lua_str = "addexp(100)";
    actor->exp = 5;
    actor->id = 10000;

    exec_buff(actor);
    return 0;
}

// g++  -g -I${dependencies_include_path}/lua-5.1.4/src -L ${dependencies_lib_path} -llua -Wl,-rpath=${dependencies_lib_path} 5.cpp -o test5

参考:
https://www.cnblogs.com/coderkian/p/4057750.html
https://juejin.cn/post/6995343033977798670

你可能感兴趣的:(lua和C相互调用)