lua和C相互調用

lua可以通過與C函數(shù)相互調用來擴展程序功能,在C中嵌入lua腳本既可以讓用戶在不重新編譯代碼的情況下修改lua代碼更新程序,也可以給用戶提供一個自由定制的接口,這種方法遵循了機制與策略分離的原則。在lua中調用C函數(shù)可以提高程序的開發(fā)效率,lua與C的相互調用在工程中相當實用。

lua和c之間的相互是通過一個抽象的棧來進行交互的。



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

todo


2. 應用

這種lua和c相互調用的方式,可以實現(xiàn)一下很方便的功能。把lua腳本作為功能插件,配置化的植入到cpp的程序中。比如在游戲中,使用某個道具可以給角色加經(jīng)驗,可以把addexp(100)這段lua代碼作為配置,當使用道具的時候,就通過cpp調用這段lua去執(zhí)行。 >完整實例代碼

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

    // 將指定的函數(shù)注冊為Lua的全局函數(shù)變量,其中第一個字符串參數(shù)為Lua代碼
    // 在調用C函數(shù)時使用的全局函數(shù)名,第二個參數(shù)為實際C函數(shù)的指針。
    lua_register(L, "addexp", addexp);

    lua_env_set(actor);

    // 在注冊完所有的C函數(shù)之后,即可在Lua的代碼塊中使用這些已經(jīng)注冊的C函數(shù)了。
    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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容